1

大致我有这样的事情:

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")

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

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

4

2 回答 2

0

您正在使用collection属性创建布局,因此您可以this.collection在布局中访问。从那里你应该能够根据需要过滤它,例如:

this.collection.filter(function(model) {
  return model.get('id') == 'id_you_want';
});

据我了解,this.items只是被this.collection塞进一个数组中。

有关此功能的一个很好的实际示例,请查看Derick Bailey 的TodoMVC项目分支中的这一部分。请注意他如何通过集合上的函数设置过滤器,然后从布局中调用。该代码应该为您指明正确的方向。getCompleted()this.collection.getCompleted()

于 2013-08-07T16:01:01.760 回答
0

如果我有误解,请纠正我,但在我看来,您正在寻找的可能是 Marionette 中的“容器方法”,此处列出:http: //marionettejs.com/docs/backbone.marionette.html下“容器方法”。

因此,如果您有一组带有 ID 的模型,而不是

this.items.get('the_one_you_want')

你会写类似的东西

this.items.findByIndex('my_index')

我从来没有亲自使用过 findByIndex 并且有一个小警告“这不能保证是一个稳定的索引”。但您也可以通过其他一些内容进行搜索,包括 CID 和模型本身。

再说一次,我可能不完全理解你的情况,但我希望能提供一些帮助......伊恩

于 2013-08-07T15:23:31.157 回答