javascript - pixar - Marionette.CompositeView, cómo pasar parámetros a Marionette.ItemView
marionette pixar (2)
Desde Marionette v2.0.0, se utiliza childViewOptions en lugar de itemViewOptions para pasar parámetros a la vista secundaria.
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});
Pero para trabajar con eventos, use Marionette.Radio lugar de pasar app.vent a la vista.
Me gustaría acceder al app.vent de Marionette.ItemView.
Tal vez una opción podría ser pasar un parámetro ( app.vent
) a Marionette.ItemView
desde Marionette.CompositeView
.
Aquí mi código:
// view/compositeView.js
define([
''marionette'',
''views/item''
], function (Marionette, itemView) {
var ListView = Marionette.CompositeView.extend({
itemView: itemView
});
});
¿Algunas ideas?
PD:
No puedo acceder a la aplicación desde itemView porque hay un problema de dependencia circular.
app -> view/compositeView -> view/itemView
v0.9 agregó un atributo itemOptions
que se puede usar para esto. Puede ser un objeto literal o una función que devuelve un objeto literal.
Backbone.Marionette.CompositeView.extend({
itemView: MyItemViewType,
itemViewOptions: {
some: "option",
goes: "here"
}
});
Todas las key: "value"
pares de key: "value"
devueltos por este atributo se suministrarán a las opciones de la vista del elemento en el inicializador.
Backbone.Marionette.ItemView.extend({
initialize: function(options){
options.some; //=> "option"
options.goes; //=> "here"
}
});
Además, si necesita ejecutar código específico para cada instancia de itemView que se genera, puede anular el método buildItemView
para proporcionar una creación personalizada de la vista de elemento para cada objeto en la colección.
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;
},
Para más información, ver:
- el registro de cambios para v0.9
- la documentación de CollectionView para itemViewOptions : tenga en cuenta que CompositeView se extiende desde CollectionView, por lo que todos los documentos de CollectionView también son válidos para CompositeView
- el código fuente anotado buildItemView