我正在使用映射插件根据从服务器发送的对象创建我的客户端 View 模型。该对象是基本的地址信息,即:address1, address2, city, state, postal, ect...
绑定(bind) View 模型后,我希望在用户更改地址时更新 google maps Canvas 。我创建了一个计算可观察对象来检查输入的值并调用 map 更新函数。之前我没有使用映射插件时,我有这个工作,即模型是在本地定义的,但是一旦我引入了映射,我就无法将计算的可观察对象附加到 View 模型。
我尝试按照映射插件的说明进行操作 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);
};
最佳答案
当您通过映射插件发送数据时,您的所有属性都将成为可观察对象。
这意味着您需要像这样访问它们:
if (this.Address1() != helpText) {
address += " " + this.Address1();
enteredElements++;
}
当您在计算的可观察对象中将它们作为可观察对象访问时,它将创建一个依赖项。因此,目前您的计算可观察值会得到初始评估,但它永远不会再次更新,因为它不访问任何可观察值的值。
关于javascript - 如何将计算的可观察对象添加到 knockoutjs 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110010/