2013-04-13 27 views
1

我認爲這是一個非常基本的問題,但我只是沒有看到錯誤。我得到了以下簡單的模型:總結了使用knockout.js和ko.com的行中的值的錯誤

var Row = function(col1, col2) 
{ 
    var self = this; 

    self.column1 = ko.observable(col1); 
    self.column2 = ko.observable(col2); 
    self.sum = ko.computed(function(){ 
     var col1 = isNaN(parseInt(this.column1)) ? 0 : parseInt(this.column1); 
     var col2 = isNaN(parseInt(this.column2)) ? 0 : parseInt(this.column2); 

     return col1 + col2; 
    }); 
} 


var RowViewModel = function() 
{ 
    this.rows = ko.observableArray([ 
     new Row(10, 20), 
     new Row(10, 20) 
    ]); 
} 

ko.applyBindings(new RowViewModel); 

正如你看到的我只想用ko.computed功能表中的行內總結兩個值。但它總是向我展示NaN(如果我不檢查它)或「0」。我真的嘗試了很多,但我無法弄清楚問題所在。在這裏是我的jsfiddle:http://jsfiddle.net/r2JQw/4/

回答

1

你有兩個問題:

  • ko.observable,所以你需要調用它與()一個函數來獲取它的值返回函數。例如:self.column1()self.column1()
  • 默認內的計算的this不是「當前」對象,以便你應該使用self代替(或傳this作爲ko.computed第二參數)

所以固定sum應該是這樣的:

self.sum = ko.computed(function(){ 
    var col1 = isNaN(parseInt(self.column1())) ? 0 : parseInt(self.column1()); 
    var col2 = isNaN(parseInt(self.column2())) ? 0 : parseInt(self.column2()); 

    return col1 + col2; 
}); 

演示JSFiddle.

+0

非常感謝您! – Marko