我有一个主干模型(我们称之为Foo
),其中包含n个子模型(我们称之为它们Bar
)的集合,在一个特定的视图中,我只想显示这些子模型中的m个,以及沿线的消息“ (nm)剩余”。
现在,我得到的是这样的:
var FooView = Backbone.View.extend({
...
render: function() {
this._barViews = [];
var bars = this.model.get("bars");
var that = this;
_.each(bars.first(maxToShow), function(bar) {
that._barViews.push(new BarView({model:bar}));
}
var remaining = bars.length - maxToShow;
this.model.set("remaining", remaining > 0 ? remaining : undefined;
var json = this.model.toJSON();
$(this.el).html(this.template(json));
_(this._holdViews).each(function(hv) {
holdList.append($(hv.render().el));
});
}
});
这行得通,但感觉很hacky,因为我将“remainingMessage”注入到模型中,即使这是特定于这个特定视图的。(另一个视图可能显示所有的bars
,或者一个都不显示,并且可能有也可能没有剩余的消息。)我对嵌套视图也不是很兴奋,因为它们意味着创建一个额外的模板文件并且必须记住包含它(FWIW,我使用 Handlebars.js 作为模板,带有服务器端编译)。
有没有更好的方法来 (1) 将bars
集合过滤到maxShown
项目,以及 (2) 生成/包含视图中剩余的数字?