4
我使用的映射基於插件的,但未通過服務器發送的對象上創建我的客戶端視圖模型。該對象是基本地址信息,即:地址1,地址2,城市,州,郵政等...如何添加計算的可觀測到knockoutjs映射
一旦視圖模型被綁定,我想谷歌地圖畫布更新,如果用戶更改地址。我創建了一個計算觀察值,用於檢查輸入的值並調用地圖更新函數。當我沒有使用映射插件時,我有這個工作,即模型是在本地定義的,但是一旦我引入了映射,我無法將計算的observable追加到視圖模型。
我試圖從映射插件documentation以下的說明中,但是計算觀察到的沒有觸發的更新。我有一個自定義的映射,它調用了一個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);
};
作出改變,但現在我得到一個「聯繫人:340Uncaught類型錯誤:對象的翻譯:有沒有方法「地址1」錯誤指向計算觀察到的。 – Jerry 2012-04-11 16:37:25
看起來它mapModel在鉻JS調試器,它的性質是「地圖」和「__ko_mapping__」。如何訪問映射插件設置的模型的其他屬性? – Jerry 2012-04-11 16:45:26
這裏,也許你可以修改證明的東西更貼近您的方案小提琴:http://jsfiddle.net/rniemeyer/RUsp2/。我不確定你的數據看起來像什麼。它看起來像你的結果數據有一個'Map'屬性,但是你也創建了一個'Map'計算的observable作爲它的一個孩子。 – 2012-04-11 16:59:09