Knockout JS Observable数组每个部分的总年龄计数

时间:2012-12-16 00:15:33

标签: javascript html knockout.js knockout-mapping-plugin

我有一个可观察的数组

var myArray = ko.observableArray([
      { name: "Jimmy", type: "Friend", Age: 30 },
      { name: "George", type: "Friend", Age: 40 },
      { name: "Zippy", type: "Enemy", Age: 20 }
    ]);

现在我希望输出为

朋友总年龄:70

吉米30 乔治40

敌人总年龄:20

Zippy 20

有一个类似的jsfiddle link

1 个答案:

答案 0 :(得分:2)

如果你想继续使用通用结构(不只是直接为“FriendTotalAge”和“EnemyTotalAge”创建计算机),那么你可以扩展distinct扩展名以包含一个用于总数的属性。 / p>

例如,您可以传入要用作总计的属性的名称,并在扩展名中添加一个部分,如:

    if (totalProp) {
        for (key in propIndex) {
            if (propIndex.hasOwnProperty(key)) {
                propIndex[key].total = ko.computed(function() {
                    var total = 0;
                    ko.utils.arrayForEach(propIndex[key], function(item) {
                        total += parseInt(ko.utils.unwrapObservable(item[totalProp]), 10) || 0;
                    });  

                    return total;                        
                });
            }                    
        }
    }  

现在,您的索引可以是“type”并包含“age”属性的计算总计。

更新小提琴:http://jsfiddle.net/rniemeyer/yrh5D/