我大概有这样的事情:
my collection; //a collection of models with ids
Layout = Backbone.Marionette.Layout.extend({
templateHelpers: {
myFunc: function() {
//this.items is an array of the serialized models in collection
}
}
})
layout = new Layout({
collection: collection,
})
问题在于myFunc()
我可以在我的集合中看到模型数据:它可以作为数组this.items使用。但是没有钥匙所以我不能做this.items.get("the_one_i_want")
之类的事情。
在这种情况下,如何访问单个模型?
(在这种情况下,它不适合使用复合视图和项目视图,并将模板助手放在项目视图上。)
答案 0 :(得分:0)
如果我误解了,请纠正我,但在我看来,也许你正在寻找的是Marionette的“容器方法”,在此列出:http://marionettejs.com/docs/backbone.marionette.html在“容器方法”下。
因此,如果您有一组带ID的模型,而不是
this.items.get('the_one_you_want')
你会写一些像这样的东西
this.items.findByIndex('my_index')
我从未亲自使用过findByIndex,并且有一点警告“这不能保证是一个稳定的索引。”但你也可以通过其他一些东西进行搜索,包括CID和模型本身。
同样,我可能不完全了解你的情况,但我希望能提供一些帮助...... 伊恩
答案 1 :(得分:0)
您正在使用collection
属性创建布局,因此您可以在布局中访问this.collection
。从那里你应该能够根据需要过滤它,例如:
this.collection.filter(function(model) {
return model.get('id') == 'id_you_want';
});
据我了解,this.items
只是this.collection
一个数组。
有关此功能的一个很好的实际示例,请查看this section项目的Derick Bailey's fork中的 TodoMVC 。请注意他如何通过集合上的getCompleted()
函数设置过滤器,然后从布局中调用this.collection.getCompleted()
。该代码应该指向正确的方向。