Я использую плагин сопоставления для создания модели просмотра на стороне клиента на основе объекта, который отправляется с сервера. Объект является базовой адресной информацией, то есть: address1, address2, city, state, postal, ect ...Как добавить вычисленное наблюдаемое на отображение knockoutjs
Как только модель просмотра привязана, я хочу, чтобы холст карт google обновлялся, если пользователь меняет адрес. Я создал вычисленный наблюдаемый, который проверяет введенные значения и вызывает функцию обновления карты. Я работал над этим раньше, когда я не использовал плагин сопоставления, то есть модель была определена локально, но как только я ввел отображение, мне не удалось добавить вычисленную наблюдаемую модель представления.
Я попытался выполнить инструкции из плагина сопоставления documentation, но вычисленный наблюдаемый не запускает обновления. У меня есть настраиваемое сопоставление, которое вызывает mapModel, который содержит вычисляемые наблюдаемые, как в примерах, но без обновлений.
Любые идеи?
$.getJSON("@Url.RouteUrl("
ContactUs_default ", new { action = "
GetPageModel ", Model.BusinessID})", function(result) {
//create map property
result.Data.Map = null;
var mapping = {
'Map': {
create: function(options) {
return new mapModel(options.data);
}
}
};
var viewModel = ko.mapping.fromJS(result.Data, mapping);
ko.applyBindings(viewModel);
});
var mapModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.Map = ko.computed(function() {
var address = "";
var enteredElements = 0;
if (this.Address1 != helpText) {
address += " " + this.Address1;
enteredElements++;
}
if (this.Address2 != helpText) {
address += " " + this.Address2;
}
if (this.City != helpText) {
address += " " + this.City;
enteredElements++;
}
if (this.State != helpText) {
address += " " + this.County;
enteredElements++;
}
if (this.PostalCode != helpText) {
address += " " + this.Postal;
}
alert("hi");
//only upate map if enough data has been entered to give accruate location
if (enteredElements >= 3) {
MYMAP.placeMarkers(address);
}
}, this);
};
Сделано это изменение, но теперь я получаю «Contact: 340Uncaught TypeError: Object [object Object] не имеет метода« Address1 »« ошибка, указывающая на вычисленное наблюдаемое. – Jerry
Глядя на картуModel в отладчике chrome js, его свойствами являются «Карта» и «__ko_mapping__». Как получить доступ к другим свойствам модели, установленной плагином отображения? – Jerry
Вот скрипка, которую вы можете изменить, чтобы продемонстрировать что-то ближе к вашему сценарию: http://jsfiddle.net/rniemeyer/RUsp2/. Я не уверен, что ваши данные выглядят точно. Похоже, что ваши данные результатов имеют свойство «Карта», но также и то, что вы создаете «Map», вычисленный как дочерний элемент. –