Ответ 1
Вычислимые наблюдаемые оцениваются сразу во время создания. В вашем случае appViewModel
еще не создан, а this
не будет представлять appViewModel
.
Существует много способов обеспечить правильность this
в этом случае. Вот два:
-
Создайте его вне вашего исходного литерала объекта:
var appViewModel = { features: ko.observableArray([ new objFeatures("Feature1", 20), new objFeatures("Feature2", 20) ]) }; appViewModel.grandTotal = ko.computed(function() { var total = 0; ko.utils.arrayForEach(this.features(), function(feature) { total += feature.price(); }); return total; }, appViewModel);
-
Создайте свою модель просмотра в функции:
var AppViewModel = function() { this.features = ko.observableArray([ new objFeatures("Feature1", 20), new objFeatures("Feature2", 20) ]); this.grandTotal = ko.computed(function() { var total = 0; ko.utils.arrayForEach(this.features(), function(feature) { total += feature.price(); }); return total; }, this); }; ko.applyBindings(new AppViewModel());