Knockout使用动态数组数组计算

时间:2012-11-28 21:10:05

标签: json knockout.js

我有一个包含行和列的网格。 我还有一个额外的列来跟踪总数。 我有类似的JSON数据:

{
    GreatGrandfather: {
        GrandFather: {
            Father: [
                {
                    Son: [
                        {
                            Name: "A",
                            Cost: "100" 
                        },
                        {
                            Name: "B",
                            Cost: "1",
                        },
                        {
                            Name: "C",
                           Cost: "50",
                        }
                    ]
                },
                {
                    [
                        Son: {
                             {
                            Name: "A",
                            Cost: "44"    
                        },
                        {
                            Name: "B",
                            Cost: "13",
                        },
                        {
                            Name: "C",
                           Cost: "22",
                        }
                    ]
                }
            ]
        }
    }
}

我可以拥有动态数量的父亲和儿子。 我的问题是如何按姓名显示儿子的总和? 所以对于这个例子,我将有3个总计。 A(144),B(14)和C(72)之和。 请帮忙!感谢

1 个答案:

答案 0 :(得分:1)

以您拥有的方式组织数据很难做到。你要求做的事情就是更容易做服务器端。

如果你重新组织数据,以便你想要总结每个Son的成本,这是可行的,因为你可以使用for循环。我在http://jsfiddle.net/photo_tom/p6dW6/15/处有一个工作演示。

我将以下ko.computed添加到每个Son数组对象。

var sons = vm.GreatGrandfather.GrandFather.Father();
var i = sons.length;
for (var i1 = 0; i1 < i; i1++) {
    sons[i1].sum = ko.computed({
        read: function() {
            var sonsArray = this.Son();
            var sonsLen = sonsArray.length;
            var sum = 0;
            for (var i2 = 0; i2 < sonsLen; i2++) {
                var costValue = sonsArray[i2].Cost();
                sum += Number(costValue) ;
            }
            return sum;
        },
        owner: sons[i1]
    });