Я создаю свое первое веб-приложение, классную книгу. Я пытаюсь вычислить средний балл из наблюдаемого массива scores
. Среднее, называемое mean
является наблюдаемым объектом. И mean
и scores
принадлежат модели.
Я просто не знаю, в чем проблема. Я заметил, что при печати mean
консоль, что напечатанное значение - NaN ИЛИ блок кода. Мой скрипт, а также консольные журналы можно увидеть здесь:
http://jsbin.com/fehoq/20/edit
Мне интересно, добавление числа к наблюдаемому не так прямолинейно, как я предполагаю, но я не уверен, каким будет правильный метод.
При работе с наблюдаемыми и наблюдаемыми массивами убедитесь, что вы правильно их читаете и пишете...
В этом блоке кода...
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();
mean
и getAvgScore()
(на самом деле, это может даже не работать). Просто сделайте mean
значение вычисленным (используя большую часть того, что у вас есть для getAvgScore()
). Кроме того, массив scores
вероятно, должен содержать наблюдаемые, а не простые числа, если вы хотите, чтобы средства менялись при изменении результатов.
this.mean
является функцией, а не переменной. Взгляните на документ: knockoutjs.com/documentation/observables.html