Ошибка с суммированием значений в строке с использованием knockout.js и ko.computed
Я думаю, что это действительно основная проблема, но я просто не вижу ошибки. Я получил следующую простую модель:
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.