我正在构建我的第一个网络应用程序,一本成绩簿。我试图从scores
的可观察数组计算平均得分。名为mean
的平均值是一个可观察对象。 mean
和scores
都属于该模型。
我不确定这里的问题是什么。我注意到在向控制台打印mean
时打印的值是NaN或代码块。我的脚本以及控制台日志可以在这里看到:
http://jsbin.com/fehoq/20/edit
我想知道在观察中添加一个数字是否与我假设的一样简单,但我不确定正确的方法是什么。
答案 0 :(得分:0)
在处理observable和可观察数组时,请确保正确读取和写入...
在这段代码中......
this.scores = ko.observableArray([79, 89]);
this.mean = ko.observable();
// ...
ko.utils.arrayForEach(_this.scores(), function (score) {
_this.mean += score;
console.log(score);
console.log(_this.mean);
});
_this.mean = _this.mean / _this.scores.length;
console.log(_this.mean);
return _this.mean;
_this.mean += score
会覆盖原始的可观察对象。相反它应该是_this.mean(_this.mean() + score)
。这种情况发生在几个地方。
访问scores
可观察数组也是如此。 _this.scores.length
应为_this.scores().length
。
以下是应用更改的代码...
ko.utils.arrayForEach(_this.scores(), function (score) {
_this.mean(_this.mean() + score);
console.log(score);
console.log(_this.mean());
});
_this.mean(_this.mean() / _this.scores().length);
console.log(_this.mean());
return _this.mean();