我有一个CollectionView
class MyCollectionView extends Backbone.Marionette.CollectionView
itemView: MyItemView
itemViewOptions: ->
{
indexInCollection: ?
}
我希望MyItemView知道其模型所在集合中的哪个索引。
我想,在MyItemView中,我可以通过
找到它@model.collection.indexOf(@model)
但是有没有办法将它从Marionette CollectionView直接传递到MyItemView,使用一些内部Marionette机制?这个指数已经暴露在某个地方吗?
答案 0 :(得分:12)
itemViewOptions
,当设置为函数时,会收到item
或model
参数。使用它来查找索引:
class MyCollectionView extends Backbone.Marionette.CollectionView
itemView: MyItemView
itemViewOptions: (model) ->
{
indexInCollection: this.collection.indexOf(model)
}
答案 1 :(得分:7)
自Marionette 2.0.0起,您可以使用 childViewOptions 功能执行此操作:
var CollectionView = Marionette.CollectionView.extend({
childViewOptions: function(model, index) {
// do some calculations based on the model
return {
foo: "bar",
childIndex: index
}
}
});
的Marionette文档中所述
答案 2 :(得分:1)
只需添加上一个答案,如果您想在其中一个视图模板中使用其中一个选项,就可以这样做:
class Run.Question extends Backbone.Marionette.ItemView
template: "mock/run/question"
initialize: ->
@model = @model.set index: @options.index
class Run.Content extends Backbone.Marionette.CompositeView
template: "mock/run/content"
itemView: Run.Question
itemViewContainer: "div.data-box"
itemViewOptions: (model) ->
{
index: @collection.indexOf(model) + 1
}
这样,您就可以访问模板中的“index”变量。