Marionette.ItemViewからapp.ventにアクセスしたいと思います。
たぶん、オプションはパラメータを渡すことかもしれません(app.vent
)からMarionette.ItemView
from Marionette.CompositeView
。
ここに私のコード:
// 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
メソッドをオーバーライドして、コレクション内の各オブジェクトのアイテムビューのカスタム作成を提供できます。
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;
},
詳細については、以下を参照してください。
Marionette v2.0.0以降、itemViewOptionsの代わりにchildViewOptionsを使用して渡します子ビューのパラメーター:
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});
ただし、イベントを操作するには、app.ventをビューに渡す代わりに、 Marionette.Radio を使用します。