我有一个Backbone文档集合,我希望按月分组,以便在同一个月内创建的所有文档组合在一起。我知道我基本上可以通过以下方式实现这一目标:
var byMonth = documents.groupBy(function(doc){
return this.get('date').getMonth()
});
现在我有byMonth
数组,设置骨干视图的最佳方法是什么,当项目添加到集合时,自动更新,其中一个文档的日期更改等等 - 这样文档将自动移动到正确的组,并相应地更新视图?
PS。我还想显示每个月的汇总数据(例如,文档数量等)。
Marionette的CompositeView非常适合这类事物,但我不确定是否以及如何使其与分组集合一起使用?
答案 0 :(得分:1)
我已经考虑了很多,并没有完美的答案,但这是我的笔记(脑力转储)以防他们帮助/激发任何新想法:
显示(并自动更新)分为3个部分/组的集合的最佳方式,例如本周,下周和即将到来的
if (event.time<next-week) {...} else if (event.time<upcoming) {...} else {...}
。可以将所有这些抽象为一个新实体,它已经引用了所有3个集合,并且具有包含上述逻辑的简单添加/删除方法。当我第一次加入我现在的团队时,他们有一些旧代码实现了选项1B,我觉得这很糟糕。然后,当我不得不实现类似的东西时,我选择了3,它有效,但随着时间的推移变得有些混乱。下次我想我会尝试选项1A,但目前尚未经过测试......
让我知道你最终做了什么!
编辑:关于Github上木偶项目的几个相关问题:
答案 1 :(得分:0)
您可以创建一个新的byMonth集合并绑定一个函数,以便在每次文档集合更改时重置它。
<强>控制器强>
App.Controller = function(){
this.documents = new DocumentCollection();
this.byMonthCollection = new ByMonthCollection();
this.byMonthView = new ByMonthView({collection: this.byMonthCollection});
}
_.extend(App.Controller.prototype, {
start: function() {
this.documents.bind("change", _.bind(this.groupByMonth, this));
this.documents.fetch();
},
groupByMonth: function() {
var grouped = documents.groupBy(function(doc){
return this.get('date').getMonth() });
this.byMonthCollection.reset(grouped);
}
}