我有这个fiddle的例子。我有一些配置文件和每小时的成本,我正在尝试总和,但它只在第一次工作。如果我修改了某些值,则总和不会更新。
我有这个功能来计算总和:
self.valoracion = function () {
var total = 0;
ko.utils.arrayForEach(self.perfilesValorados(), function (item) {
var tarifa = ko.utils.arrayFirst(self.perfiles(), function(perfil) {
return perfil.perfil === item.perfil;
});
total += parseInt(item.horas) * tarifa.tarifa;
});
return total.toFixed(2);
};
但如果我改变它以使其计算,我有一个错误,说perfilesValorados不是一个函数。
我怎么能让它发挥作用?
答案 0 :(得分:2)
您需要在代码中进行2次更改:
valoracion
更改为computed function。为什么?因为您希望在任何observable
值发生更改时重新计算总和值。perfiles
的{{1}}数组对象以保留valoracion
属性(,这就是问题解决方法 )。对于第2步,您已经使用observable
属性定义了Profile
模型,但是当将对象添加到observable
数组时,您没有使用它( 我必须想知道为什么? 强>)。要解决此问题,您只需在ViewModel中添加perfiles
即可正确构建init
数组。我希望你有这个想法。
的 DEMO 强> 的
的更新强> 的
对于无效的更新示例here,您在向perfiles
插入新元素时遇到了问题。
根据Observable Arrays documentation:
语法更方便。要调用KO的推送方法,只需编写observableArray
因此,请在init函数中更新代码以使用:
myObservableArray.push(...)
代替self.perfiles.push
self.perfiles().push
代替self.perfilesValorados.push
更新后的示例的工作版 here