我想从 Marionette.ItemView 访问 app.vent。
也许可以选择将参数 (app.vent
) 从 Marionette.CompositeView
传递到 Marionette.ItemView
。
这是我的代码:
// view/compositeView.js
define([
'marionette',
'views/item'
], function (Marionette, itemView) {
var ListView = Marionette.CompositeView.extend({
itemView: itemView
});
});
有什么想法吗?
附注:
我无法从 itemView 访问该应用程序,因为存在循环依赖问题。
app -> view/compositeView -> view/itemView
最佳答案
v0.9 添加了可用于此目的的 itemOptions
属性。它可以是对象字面量,也可以是返回对象字面量的函数。
Backbone.Marionette.CompositeView.extend({
itemView: MyItemViewType,
itemViewOptions: {
some: "option",
goes: "here"
}
});
此属性返回的所有 key: "value"
对都将提供给初始化程序中的 itemview 选项
Backbone.Marionette.ItemView.extend({
initialize: function(options){
options.some; //=> "option"
options.goes; //=> "here"
}
});
此外,如果您需要为构建的每个 itemView 实例运行特定代码,您可以重写 buildItemView
方法,为集合中的每个对象提供项目 View 的自定义创建。
buildItemView: function(item, ItemView){
// do custom stuff here
var view = new ItemView({
model: item,
// add your own options here
});
// more custom code working off the view instance
return view;
},
有关详细信息,请参阅:
- the change log for v0.9
- the CollectionView documentation for itemViewOptions - 请注意,CompositeView 扩展自 CollectionView,因此所有 CollectionView 文档也对 CompositeView 有效
- the buildItemView annotated source code
关于javascript - Marionette.CompositeView,如何将参数传递给Marionette.ItemView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11273115/