如何在Collection View(或Layout)的templateHelper中访问特定模型?

时间:2013-08-07 12:06:00

标签: javascript backbone.js scope marionette

我大概有这样的事情:

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")之类的事情。

在这种情况下,如何访问单个模型?

(在这种情况下,它不适合使用复合视图和项目视图,并将模板助手放在项目视图上。)

2 个答案:

答案 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()。该代码应该指向正确的方向。