2012-10-21 102 views
2

我嘗試這樣做:Knockoutjs + ko.mapping.fromJS +計算字段不計算計算

myData = {weight: 100, anotherWeight: 120.55}; // when my data is plain json - all work 

$.when($.getJSON(url, {param}, function(data) {myData = data}). 
//when i got it from ajax - dosn't work 
then(function(){ 
    var taskModel = function(data) 
    { 
    var self = this; 
    ko.mapping.fromJS(data, {}, self); 
    this.computedWeight = ko.computed(function() { return self.weight() + 
     ' ---- ' + 
     self.anotherWeight() + ' kg'; }); 
    } 
    ko.applyBindings(new taskModel(myData)); 
}); 

<input type="text" data-bind="value: weight"/><br/> 
<input type="text" data-bind="value: anotherWeight"/><br/> 
<span data-bind="text: computedWeight"></span> 

第一次 - 加載後 - computedWeight是計算正確。但是當我改變體重或其他體重時 - computedWeight不會改變。
謝謝。

+0

是返回服務器的正確的數據?成功回調中返回什麼?請看看這[jsfiddle](http://jsfiddle.net/zEfRj/4/) – nemesv

+0

謝謝。在jsfiddle - http://jsfiddle.net/EfRj/4/ - 所有的工作。但在我的情況下 - 計算字段不計算。我將嘗試調查ajax響應。 – awzster

回答

0

嘗試ko.mapping.fromJSON()代替ko.mapping.fromJS()

+0

謝謝all.The問題解決了。有我的錯誤。我使用自定義綁定重量和anotherWeight。在這種情況下,簡單的計算(...)不起作用。當我使用簡單的bndig <... data-bind =「value:weight」> - 所有的工作。
對不起。我的意思。 – awzster