如何在ItemView模板中总结Marionette / Backbone集合的属性?

时间:2017-11-07 13:36:09

标签: javascript typescript backbone.js underscore.js marionette

(使用Marionette 1.8.3 / Backbone.js / Underscore.js和TypeScript。)

我有一个ItemView。

这个ItemView有一个模型:

export class M1 extends backbone.Model {
    content: MContent = new MContent();
    ...
}

模型的属性是Collection:

export class MContent extends backbone.Collection<MContentGroup> {
    model: MContentGroup;
    ...
}

该集合是以下模型的集合,该模型具有“Count”属性:

export class MContentGroup extends backbone.Model {
    idAttribute: string = "id";
    constructor(...) {
        ...
        this.set("Count", Math.max(count, 0));
        ...
    }
    ...
}

在我的ItemView模板中,我想显示Count属性的总和。

从某些搜索来看,似乎建议使用Underscore的reduce(),但我不确定我是如何在这种语法中引用我的集合及其计数:

_.reduce(this? Content?, function(memo, Count){ return memo + Count; }, 0);

1 个答案:

答案 0 :(得分:1)

如果我理解得很清楚,您需要收集所有模型的计数属性的总和。

我会使用MyCollection.toJSON(),它将为您提供模型数组(http://backbonejs.org/#Collection-toJSON

然后在数组上循环并求它(例如使用reduce)

if match:
    print(match)

像这样的东西

修改

作为suggested by Emile Bergeron,更好的方法是直接使用收集方法:

var MyModels = MyCollection.toJSON();
var sum = _.reduce(MyModels, function(model, countSum) {
    return countSum + model.count;
});