我想从Marionette.ItemView访问app.vent。
也许可以选择从Marionette.CompositeView向Marionette.ItemView传递一个参数(app.vent)。
下面是我的代码:
// view/compositeView.js
define([
'marionette',
'views/item'
], function (Marionette, itemView) {
var ListView = Marionette.CompositeView.extend({
itemView: itemView
});
});有什么想法吗?
附言:
我无法从itemView访问该应用程序,因为存在循环依赖问题。
app -> view/compositeView -> view/itemView发布于 2012-07-01 00:09:23
v0.9添加了一个可用于此目的的itemOptions属性。它既可以是对象文字,也可以是返回对象文字的函数。
Backbone.Marionette.CompositeView.extend({
itemView: MyItemViewType,
itemViewOptions: {
some: "option",
goes: "here"
}
});此属性返回的所有key: "value"对都将提供给初始化程序中的项视图的选项
Backbone.Marionette.ItemView.extend({
initialize: function(options){
options.some; //=> "option"
options.goes; //=> "here"
}
});此外,如果需要为生成的每个itemView实例运行特定代码,则可以重写buildItemView方法,以便为集合中的每个对象提供项视图的自定义创建。
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;
},有关详细信息,请参阅:
是从CompositeView扩展而来的,因此对于作为CollectionView的CompositeView,所有CollectionView文档都是有效的
发布于 2015-04-02 07:40:40
从Marionette v2.0.0开始,使用childViewOptions而不是itemViewOptions将参数传递给子视图:
var MyCompositeView = Marionette.CompositeView.extend({
childView: MyChildView,
childViewOptions: function(model, index) {
return {
vent: this.options.vent
}
}
});
var MyChildView = Marionette.ItemView.extend({
initialize: function(options) {
// var events = options.vent;
}
});
new MyCompositeView({ vent: app.vent, collection: myCollection});但是为了处理事件,让我们使用Marionette.Radio而不是将app.vent传递给视图。
https://stackoverflow.com/questions/11273115
复制相似问题