web-dev-qa-db-fra.com

marionette.js voit la différence entre onShow et onRender?

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

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.

18
Vitalii Petrychuk

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.

41
John Bernardsson

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");
     }
6
addisu

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

0
zloctb