2012-06-30 21 views
21

Vorrei accedere all'app.vent da Marionette.ItemView.Marionette.CompositeView, come passare i parametri a Marionette.ItemView

Forse un'opzione potrebbe essere passare un parametro (app.vent) a Marionette.ItemView da Marionette.CompositeView.

Ecco il mio codice:

// view/compositeView.js 
define([ 
    'marionette', 
    'views/item' 
], function (Marionette, itemView) { 
    var ListView = Marionette.CompositeView.extend({ 
     itemView: itemView 
    }); 
}); 

Tutte le idee?

P.S .:
Non riesco ad accedere all'app da itemView perché c'è un problema di dipendenza circolare.

app -> view/compositeView -> view/itemView 

risposta

29

v0.9 aggiunto un attributo itemOptions che può essere utilizzato per questo. Può essere un oggetto letterale o una funzione che restituisce un oggetto letterale.



Backbone.Marionette.CompositeView.extend({ 
    itemView: MyItemViewType, 

    itemViewOptions: { 
    some: "option", 
    goes: "here" 
    } 

}); 

Tutte le key: "value" coppie che vengono restituiti da questo attributo saranno forniti alle opzioni del itemview in teh inizializzazione


Backbone.Marionette.ItemView.extend({ 
    initialize: function(options){ 
    options.some; //=> "option" 
    options.goes; //=> "here" 
    } 
}); 

Inoltre, se è necessario eseguire codice specifico per ogni istanza itemView che è costruito, è possibile sovrascrivere il metodo buildItemView per fornire la creazione personalizzata della vista oggetto per ciascun oggetto nella raccolta.


    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; 
    }, 

Per ulteriori informazioni, vedere:

+7

_itemViewOptions_ non è più utilizzato, è necessario utilizzare _childViewOptions_ ora. – DiegoG

13

Da Marionette v2.0.0, childViewOptions viene utilizzato al posto di itemViewOptions per passare i parametri alla vista del bambino:

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}); 

Ma per lavorare con gli eventi, consente di utilizzare Marionette.Radio invece di passare app.vent alla vista.

Problemi correlati