8

Creo que puedo tener un malentendido fundamental sobre cómo se va a utilizar Marionette.Layout.Descripción de los diseños en Marionette para Backbone.js

Estoy intentando algo como esto:

enter image description here

El diseño incluye dos Marinotette.ItemView s: El "explotar" ItemView y el "PopStar" ItemView. Esta disposición está diseñada para contener siempre estos puntos de vista, por lo que trató de hacer esto:

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 

    } 
}) 

Pero parece que las regiones no están disponibles hasta después de que se preste el diseño. Intenté llamar al this.render() antes de agregar las vistas, pero esto no funcionó. Estoy bastante seguro de que el problema fundamental aquí es que estoy aplicando el diseño en las circunstancias incorrectas.

¿Qué debería estar haciendo en esta circunstancia? ¿Cuándo es la hora correcta para usar Marionette.Layout?

Gracias!

Respuesta

17

Muestra las vistas de la región en el método onRender del diseño. Código:

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

Tenga en cuenta que en este caso el _.bindAll(this) no es necesario.

+1

Con respecto a '_.bindAll (this)' todavía estoy confundido en qué casos usarlo y en qué casos no hacerlo. – CodeRain

+4

Para la mayoría de los métodos llamados directamente por Marionette, como los manejadores de eventos y 'onRender',' onClose', el contexto está configurado correctamente por Marionette y no necesitas 'bindAll'. Si alguien más está llamando a su método, diga una devolución de llamada jQuery de AJAX o un evento enlazado directamente usando jquery, y quiere que el contexto 'this' siga siendo la vista, entonces' _.bindAll (this, 'myfunc') 'es su amigo. –

+0

salvó mi día :) – SAR

Cuestiones relacionadas