1

我认为这是一个非常基本的问题,但我只是没有看到错误。我得到了以下简单的模型:

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/

4

1 回答 1

1

你有两个问题:

  • ko.observable返回一个函数,因此您需要通过将其作为函数调用来获取它的值()。例如:self.column1()self.column1()
  • 默认情况下,this计算的内部不是“当前”对象,因此您应该改用(或作为 的第二个参数self传递)thisko.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。

于 2013-04-13T06:59:30.700 回答