2013-06-14 13 views
18

Sono nuovo di Marionette.js e mentre sto rifattorizzando il mio codice Backbone.js esistente, ho notato che ci sono due callback sulla vista di Marionette (itemview) che mi sembrava simile, ad esempio onRender e onShow. Qual è la differenza e il modo migliore di usarli?marionette.js visualizzare la differenza tra onShow vs onRender?

Tuttavia, guardando il codice sorgente, penso che entrambi gli eventi "render" e "show" vengano generati all'interno di "view initialize".

constructor: function(){ 
    _.bindAll(this, "render"); 

    var args = Array.prototype.slice.apply(arguments); 
    Backbone.View.prototype.constructor.apply(this, args); 

    Marionette.MonitorDOMRefresh(this); 
    this.listenTo(this, "show", this.onShowCalled, this); 
} 

risposta

18

onShow: la vista non attiva l'evento "mostra". Si innesca da una regione. Quindi non verrà chiamato in alcuni casi.

onRender: questo metodo viene eseguito ogni volta che viene visualizzata la vista.

+0

Sei sicuro? Dove hai trovato questa informazione? –

+0

grazie .. e questo ha senso – addisu

+0

Tuttavia, guardando il codice sorgente, penso che entrambi gli eventi "render" e "show" vengano generati all'interno di "visualizzazione iniziale" .... ' costruttore: function() { _. bindAll (this, "render"); var args = Array.prototype.slice.apply (argomenti); Backbone.View.prototype.constructor.apply (this, args); Marionette.MonitorDOMRefresh (questo); this.listenTo (questo, "mostra", this.onShowCalled, this); } ' – addisu

6

Bene, questo è il metodo show in Marionette e spiega la questione

show: function(view){ 

     this.ensureEl(); 

     var isViewClosed = view.isClosed || _.isUndefined(view.$el); 

     var isDifferentView = view !== this.currentView; 

     if (isDifferentView) { 
     this.close(); 
     } 

     view.render(); 

     if (isDifferentView || isViewClosed) { 
     this.open(view); 
     } 

     this.currentView = view; 

     Marionette.triggerMethod.call(this, "show", view); 
     Marionette.triggerMethod.call(view, "show"); 
    } 
40

Penso che ci sia qualcosa di non totalmente corretto nella risposta di Vitaliy. La corretta sarà:

onShow: la vista non attiva l'evento 'mostra'. Si innesca da una regione. Quindi non verrà chiamato in alcuni casi.

onRender: questo metodo viene eseguito ogni volta che viene visualizzata la vista.

Nota che 'onRender' essere eseguito non significa che l'oggetto è in realtà aggiunto al DOM. Significa solo che è stato appena reso (dati riempito il modello, si dispone di una tale. $ El affrontare, etc.)

D'altra parte, se 'OnShow' è chiamato perché il 'show 'L'evento è stato attivato da una regione e poiché le regioni solitamente rappresentano un elemento all'interno del DOM, è possibile che quando ' onShow 'viene chiamato, la vista venga effettivamente aggiunta al DOM.

+1

Questo è corretto, l'affermazione che onRender si attiva dopo che un elemento è stato inserito nel DOM è fuorviante e confonderà molte persone. –

+2

Perché non migliorare la risposta? –

+2

Scusa, non sapevo di poterlo fare:/ Ho appena modificato la risposta e la cambio, o devo fare qualcosa di più? Ancora una volta, mi scuso :( –

0

Nella versione 3 gli eventi regione mostrano e prima: la visualizzazione non viene più attivata nella vista. Puoi usare render e before: render eventi nella maggior parte dei casi. Se è necessario sapere che la vista è nel DOM quindi è possibile utilizzare allegare o dom: aggiornare

informazioni http://blog.marionettejs.com/2016/08/23/marionette-v3/index.html

Problemi correlati