我有一个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/

10-12 04:31
查看更多