Próbuję obliczyć sumę pola "cena" obiektu obserwowalnegoArray. Mam następujący kod do tej pory:Używanie ko.utils.arrayForEach do iterowania po obiekcie obserwowalnym
(function(){
function objFeatures(name,price) {
return {
name: ko.observable(name),
price: ko.observable(price),
removeFeatures: function() {
appViewModel.features.remove(this);
}
}
}
var appViewModel = {
features: ko.observableArray([
new objFeatures("Feature1", 20),
new objFeatures("Feature2", 20)
]),
grandTotal: ko.computed(function() {
var total = 0;
ko.utils.arrayForEach(this.features(), function() {
total += this.price();
})
return total;
})
};
ko.applyBindings(appViewModel);
}());
Kiedy próbuję uruchomić to, otrzymuję „Błąd: this.features nie jest funkcją” w konsoli Firebug.
Co robię źle?
pojechałem z pierwszą podejście, teraz nie mogę uzyskać dostępu do 'this.price()' – nthapa13
W końcu użyłem (absolutnie nie mam pojęcia jak to działało) --- 'var self = this; $ .each (self.features(), function() { total + = this.price(); }); 'ale używanie ko.utils.arrayForEach nadal nie działa, dziękuję za odpowiedź. – nthapa13
@ Nthapa13 Nie zauważyłem składni używanej w tej części. Zaktualizowałem powyższe odpowiedzi, aby pokazać, że funkcja określona w 'ko.utils.arrayForEach' przyjmuje element jako pierwszy argument, wtedy nie trzeba używać' this' w funkcji. –