2012-04-11 65 views
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); 
};​ 

回答

2

當您通過映射插件發送數據時,所有屬性都將變爲可觀察值。

這意味着你需要訪問他們作爲一個功能類似像:

if (this.Address1() != helpText) { 
     address += " " + this.Address1(); 
     enteredElements++; 
    } 

當您訪問他們作爲一個可觀察觀測計算裏面,那麼它會創建一個依賴。因此,目前您的計算的觀測值會得到初始評估,但它不會再次更新,因爲它不訪問任何觀察值。

+0

作出改變,但現在我得到一個「聯繫人:340Uncaught類型錯誤:對象的翻譯:有沒有方法「地址1」錯誤指向計算觀察到的。 – Jerry 2012-04-11 16:37:25

+0

看起來它mapModel在鉻JS調試器,它的性質是「地圖」和「__ko_mapping__」。如何訪問映射插件設置的模型的其他屬性? – Jerry 2012-04-11 16:45:26

+2

這裏,也許你可以修改證明的東西更貼近您的方案小提琴:http://jsfiddle.net/rniemeyer/RUsp2/。我不確定你的數據看起來像什麼。它看起來像你的結果數據有一個'Map'屬性,但是你也創建了一個'Map'計算的observable作爲它的一個孩子。 – 2012-04-11 16:59:09