8

Myślę, że mogę mieć fundamentalne niezrozumienie, w jaki sposób zamierza się używać Marionette.Layout.Zrozumienie układów w marionetce dla Backbone.js

Próbuję coś takiego:

enter image description here

Układ zawiera dwa Marinotette.ItemView: The "Explode" ItemView i "PopStar" ItemView. Układ ten został zaprojektowany, aby zawsze zawierać te poglądy, więc starałem się to zrobić:

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 

    } 
}) 

Ale wygląda na to, że regiony nie są dostępne dopiero po układ jest renderowany. Przed dodaniem widoków próbowałem wywoływać this.render(), ale to nie działało. Jestem prawie pewien, że podstawowym problemem jest to, że stosuję układ w niewłaściwych okolicznościach.

Co powinienem robić w tej sytuacji? Kiedy jest właściwy czas na użycie Marionette.Layout?

Dzięki!

Odpowiedz

17

Wyświetl widoki regionu w metodzie onRender układu. Kod:

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

Należy pamiętać, że w tym przypadku _.bindAll(this) nie jest potrzebny.

+1

Jeśli chodzi o '_.bindAll (this)' nadal jestem zdezorientowany, w jakich przypadkach należy go używać iw jakich przypadkach nie. – CodeRain

+4

Dla większości metod wywoływanych bezpośrednio przez Marionetkę, takich jak procedury obsługi zdarzeń i 'onRender',' onClose', kontekst jest poprawnie ustawiony przez Marionetkę i nie potrzebujesz "bindAll". Jeśli ktoś inny wywołuje twoją metodę, powiedz wywołanie zwrotne jQuery z AJAX lub zdarzenie związane bezpośrednio za pomocą jquery, a chcesz, aby kontekst "to" nadal był widokiem, wtedy '_.bindAll (this, 'myfunc')' jest twoim przyjaciel. –

+0

zapisał mój dzień :) – SAR

Powiązane problemy