backbone.js - marionette.js ve la diferencia entre onShow vs onRender?
view (4)
Bueno, este es el método de show
en Marionette y explica la pregunta
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");
}
Soy nuevo en Marionette.js y mientras estoy refactorizando mi código Backbone.js existente, noté que hay dos devoluciones de llamada en la vista Marionette (itemview) que me parecían similares, es decir, onRender y onShow. ¿Cuál es la diferencia y la mejor manera de usarlos?
Sin embargo, mirando el código fuente, creo que los eventos "render" y "show" se generan dentro de "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);
}
Creo que hay algo que no es totalmente correcto en la respuesta de Vitaliy. El correcto será:
onShow: la vista en sí misma no desencadena el evento ''show''. Se dispara por una región. Por eso no se llamará en algunos casos.
onRender: este método se ejecuta cada vez que se renderiza la vista.
Tenga en cuenta que la ejecución de ''onRender'' no significa que el objeto se agregue realmente al DOM . Solo significa que se acaba de procesar (los datos llenaron la plantilla, usted tiene un esto. $ El para tratar, etc.)
Por otro lado, si se llama ''onShow'' porque el evento ''show'' se ha desencadenado desde una región, y como las regiones generalmente representan un elemento dentro del DOM, puede esperar que cuando se llame ''onShow'' , la vista sea de hecho añadido al DOM.
En la versión 3, los eventos de la región muestran y antes de: la demostración ya no se activa en la vista. Puede usar render y before: render eventos en la mayoría de los casos. Si necesita saber que la vista está en el DOM, puede usar attach o dom: refresh
info http://blog.marionettejs.com/2016/08/23/marionette-v3/index.html
onShow
: la vista en sí misma no desencadena el evento ''show''. Se dispara por una región. Por eso no se llamará en algunos casos.
onRender
: este método se ejecuta cada vez que se renderiza la vista.