我的简单'依赖可观察'不会更新,当我给它一个函数的语法,因为turorials说是必需的,我得到一个javascript错误。我只想总结三个可观察的值。
如果我使用
<td>${G1 + G2 + G3}</td>
我得到一个静态显示:当其他输入字段改变时,它不会更新。
如果我使用viewModel.Series,我根本不会显示任何值。 如果将viewModel.Series更改为:this.G1()+ this.G2()我得到一个javascript错误,说G1不是函数。
var initialData = {"DateId":32,"Scores":[{"Alias":"Cap Stocks","G1":129,"G2":123,"G3":222,
var theScores = initialData.Scores;
var viewModel = {scores : ko.observableArray(theScores) };
viewModel.Series = ko.dependentObservable(function() {
return this.G1 + this.G2 + this.G3;
}, viewModel);
$(function () {
ko.applyBindings(viewModel); }
这是我的模板绑定,至少显示一些东西
<td> ${Alias}</td>
<td><input data-bind="value: G1"/></td>
<td><input data-bind="value: G2"/></td>
<td><input data-bind="value: G3"/></td>
<td>${G1 + G2 + G3}</td>
答案 0 :(得分:2)
在这种情况下,您需要观察G1,G2和G3属性。 observableArray会通知数组本身何时发生更改,但不会通知其项目的各个属性。
您可以使用mapping plugin之类的内容,或使用构造函数自行映射,该构造函数可以接收分数对象或每个属性。
function Score(alias, g1, g2, g3) {
this.Alias = alias;
this.G1 = ko.observable(g1);
this.G2 = ko.observable(g2);
this.G3 = ko.observable(g3);
this.Series = ko.dependentObservable(function() {
return parseInt(this.G1(), 10) + parseInt(this.G2(), 10) + parseInt(this.G3(), 10);
}, this);
}
然后,映射现有的数组:
var theScores = ko.utils.arrayMap(initialData.Scores, function(score) {
return new Score(score.Alias, score.G1, score.G2, score.G3);
});