Je suis nouveau sur Marionette.js et, pendant que je refacturais mon code Backbone.js existant, j’ai remarqué qu’il y avait deux rappels sur la vue Marionette (itemview) qui me semblaient similaires, c’est-à-dire onRender et onShow. Quelle est la différence et une meilleure façon de les utiliser?
Cependant, en regardant le code source, je pense que les événements "render" et "show" sont levés dans "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);
}
onShow
: la vue elle-même ne déclenche pas l'événement 'show'. Cela déclenche par une région. Donc, il ne sera pas appelé dans certains cas.
onRender
: cette méthode s'exécute chaque fois que la vue est rendue.
Je pense qu'il y a quelque chose de pas tout à fait correct dans la réponse de Vitaliy. Le correct sera:
onShow: la vue elle-même ne déclenche pas l'événement 'show'. Cela déclenche par une région. Donc, il ne sera pas appelé dans certains cas.
onRender: cette méthode s'exécute chaque fois que la vue est rendue.
Notez que 'onRender' en cours d'exécution ne signifie pas que l'objet est réellement ajouté au DOM. Cela signifie simplement qu’il vient d’être rendu (les données ont été remplies dans le modèle, vous avez un problème à traiter, etc.)
D'autre part, si 'onShow' est appelé car l'événement 'show' a été déclenché à partir d'une région et, comme les régions représentent généralement un élément du DOM, vous pouvez vous attendre à ce que que lorsque 'onShow' est appelée, la vue est en effet ajoutée au DOM.
Eh bien, c’est la méthode show
de Marionette et elle explique la question
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");
}
Dans la version 3, les événements de région show et before: show ne sont plus déclenchés Dans la vue. Vous pouvez utiliser render et before: render events dans la plupart des cas. Si Vous devez savoir que la vue est dans le DOM, vous pouvez utiliser attach ou dom: refresh
info http://blog.marionettejs.com/2016/08/23/marionette-v3/index.html