Knockout JS计算字段和数组上的聚合函数

时间:2013-12-31 12:52:05

标签: knockout.js

我想创建一个计费模块,在视图中我有一个预定义没有行的表。

当用户输入产品时,我会用相关费率填充它。当他输入数量时,我想计算该行的账单金额,即数量*费率+其他一些值。 此外,总计包括所有行的总和(以及一些税收计算)。

我想使用knockout执行此操作,因此如果用户更改行中的任何数量,行数会自动更改,总计也会更改。当用户添加产品或删除产品时,会发生同样的事情。但我对如何创建视图模型感到困惑。

请帮助!!

var rows = ko.observableArray([]);
function billRow(rate)
{
    var self = this;
    self.prodQty = ko.observable(0);
    self.prodRate = ko.observable(rate);
    self.making = ko.observable(0);
    self.rowTotal = ko.computed(function () {
        return (self.prodQty * self.prodRate) + self.making;
    });
}

function viewmodel() {
    var self = this;
    self.rows = rows;
    self.grossTotal = ko.computed(function () {
        var total = 0;
        for (var i = 0; i < self.rows().length;i++) {
            total += self.rows()[i].rowTotal();  
        }
        return total;
    });
    self.Vat = ko.computed(function () { return (self.grandTotal * vatRate) / 100; });
    self.grandTotal = ko.computed(function () { return self.grossTotal + self.Vat; });
}

ko.applyBindings(new viewmodel());

问题是我的表已经用10行表示了......我怎么把行绑定到这个视图模型

1 个答案:

答案 0 :(得分:1)

淘汰赛团队在操纵馆藏方面发布了good tutorial

您基本上从包含所需数据的BillingLine对象开始。 在该对象中,您有一个计算字段。该字段将捕获附加到其上的变量的变化,并根据其值重新计算自己。

接下来是持有BillingLines的集合。每一行都是一个对象......等等。

希望这有帮助。