我正在使用映射插件来创建基于从服务器发送的对象的客户端视图模型。对象是基本地址信息,即:address1、address2、city、state、postal 等...
绑定视图模型后,如果用户更改地址,我希望更新谷歌地图画布。我创建了一个计算的 observable,它检查输入的值并调用地图更新函数。当我不使用映射插件时,我之前有这个工作,即模型是在本地定义的,但是一旦我引入映射,我就无法将计算的 observable 附加到视图模型。
我尝试按照映射插件文档中的说明进行操作,但计算出的 observable 没有触发更新。我有一个自定义映射,它调用一个 mapModel,其中包含示例中计算的 observable,但没有更新。
有任何想法吗?
$.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);
};