Knockout嵌套列表的计算总和

时间:2013-08-12 13:38:26

标签: jquery knockout.js knockout-mapping-plugin

我正在尝试计算嵌套子列表的值的总和,我要查询的VM正在使用KO映射器进行映射,然后使用我计算的字段进行扩展。它似乎无法找到我正在寻找的嵌套数组:

var HouseholdViewModel = function(data) {
    this.$type = 'HouseholdViewModel';
    ko.mapping.fromJS(data, mapping, this);

    this.T12 = ko.computed(function () {
        var total = 0;
        ko.utils.arrayForEach(this.Accounts(), function (account) {
            total += account.T12Revenue();
        });
        return total;
    }, this);

};

var AccountViewModel = function(data) {
    this.$type = 'AccountViewModel';
    ko.mapping.fromJS(data, mapping, this);
};

var mapping = {
    'Households': {
        create: function(options) {
            return new HouseholdViewModel(options.data);
        }
    },
    'Accounts': {
        create: function(options) {
            return new AccountViewModel(options.data);
        }
    }
};

我收到错误消息'Uncaught TypeError:Object [object Object]没有方法'Accounts''。我假设这是由于KO.Mapper尚未绑定帐户但映射调用高于计算的可观察量。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

一个简单的解决方法是在尝试在计算中使用帐户之前确保您拥有帐户。当帐户存在时,这将通知您的计算机重新计算 -

var HouseholdViewModel = function(data) {
    this.$type = 'HouseholdViewModel';
    ko.mapping.fromJS(data, mapping, this);

    this.T12 = ko.computed(function () {
        var total = 0;
        if (!this.Accounts) { return 0; }
        ko.utils.arrayForEach(this.Accounts(), function (account) {
            total += account.T12Revenue();
        });
        return total;
    }, this);
};

在那里添加if语句,不返回任何内容(或任何你想要的内容),因为this.Accounts不存在。