我有一个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不是函数。
我该如何运作?
最佳答案
您需要在代码中进行2处更改:
将您的valoracion
更改为computed function。为什么?因为您希望在任何observable
值更改时都重新计算总和值。
为了使步骤(1)工作,您的perfiles
数组对象需要计算valoracion
来保存observable
属性(这是问题的把戏)。
对于步骤2,您已经使用Profile
属性定义了observable
模型,但是当将对象添加到perfiles
数组时,您没有使用它(我想知道为什么吗?)。要解决此问题,您只需将init
添加到ViewModel中即可在其中正确构造perfiles
数组。我希望你有主意。
DEMO
更新:
对于无法运行的更新示例here,您遇到了在observableArray
中插入新元素的问题。
根据Observable Arrays documentation:
语法更方便。要调用KO的push方法,只需编写myObservableArray.push(...)
因此,请在init函数中更新代码以使用:self.perfiles.push
代替self.perfiles().push
self.perfilesValorados.push
代替self.perfilesValorados().push
您更新的示例here的工作版本
关于javascript - 创建计算值来计算成本不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20658156/