8

Penso di avere un fondamentale fraintendimento su come utilizzare Marionette.Layout.Informazioni sui layout in Marionette per Backbone.js

Sto cercando di qualcosa di simile:

enter image description here

Il layout prevede due Marinotette.ItemView s: Il "esplodere" ItemView e il "PopStar" ItemView. Questo layout è progettato per contenere sempre questi punti di vista, così ho cercato di fare questo:

var TheLayout = Backbone.Marionette.Layout.extend({ 
    template: '#the=layout-template', 
    regions: { 
     explode: '#explode-region', 
     popstar: '#popstar-region' 
    } 
    initialize:function(options){ 
     _.bindAll(this); 

     var explodeView = new ExplodeView(); 
     this.explode.show(explodeView);  // <-- This throws and exception because the regions are not available yet 

    } 
}) 

Ma sembra che le regioni non sono disponibili fino a dopo il layout è reso. Ho provato a chiamare this.render() prima di aggiungere le viste, ma questo non ha funzionato. Sono abbastanza sicuro che il problema fondamentale qui è che sto applicando il layout nella circostanza sbagliata.

Cosa dovrei fare in questa circostanza? Qual è l'ora corretta per utilizzare Marionette.Layout?

Grazie!

risposta

17

Mostra le viste della regione nel metodo onRender del layout. Codice:

var TheLayout = Backbone.Marionette.Layout.extend({ 
    template: '#the=layout-template', 
    regions: { 
     explode: '#explode-region', 
     popstar: '#popstar-region' 
    } 
    onRender: function() { 
     var explodeView = new ExplodeView(); 
     this.explode.show(explodeView); 
    } 
}) 

nota che in questo caso non è necessaria la _.bindAll(this).

+1

Per quanto riguarda '_.bindAll (this)' sono ancora confuso in quali casi usarlo e in quali casi no. – CodeRain

+4

Per la maggior parte dei metodi chiamati direttamente da Marionette, come i gestori di eventi e 'onRender',' onClose', il contesto è impostato correttamente da Marionette e non è necessario il 'bindAll'. Se qualcun altro sta chiamando il tuo metodo, ad esempio una callback jQuery da AJAX o un evento associato direttamente con jquery, e vuoi che il contesto 'questo' sia ancora la vista, allora' _.bindAll (this, 'myfunc') 'è il tuo amico. –

+0

mi ha salvato la giornata :) – SAR

Problemi correlati