it-swarm.com.de

wie unterscheidet sich onShow von onRender?

Ich bin neu in Marionette.js und während ich meinen vorhandenen Backbone.js-Code überarbeite, habe ich festgestellt, dass es in der Marionette-Ansicht (Elementansicht) zwei Rückrufe gibt, die mir ähnlich erschienen, d. H. OnRender und onShow. Was ist der Unterschied und die bessere Art, sie zu nutzen?

Wenn ich mir den Quellcode anschaue, denke ich jedoch, dass sowohl "render" - als auch "show" -Ereignisse in "view initialize" ausgelöst werden.

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: view selbst löst kein Show-Ereignis aus. Es wird durch eine Region ausgelöst. Daher wird es in einigen Fällen nicht aufgerufen.

onRender: Diese Methode wird jedes Mal ausgeführt, wenn die Ansicht gerendert wird.

18

Ich denke, dass etwas in der Antwort von Vitali nicht ganz richtig ist. Das Richtige wird sein:

onShow: view selbst löst kein "show" -Ereignis aus. Es wird durch eine Region ausgelöst. Daher wird es in einigen Fällen nicht aufgerufen.

onRender: Diese Methode wird jedes Mal ausgeführt, wenn die Ansicht gerendert wird.

Beachten Sie, dass 'onRender' ausgeführt wird nicht bedeutet, dass das Objekt tatsächlich zum DOM hinzugefügt wird. Es bedeutet nur, dass es gerade gerendert wurde (Daten füllen die Vorlage, Sie haben ein this. $ El, mit dem Sie arbeiten müssen, usw.)

Wenn dagegen 'onShow' aufgerufen wird, weil das 'show' -Ereignis aus einer Region ausgelöst wurde, und da Regions normalerweise ein Element innerhalb des DOM darstellen, können Sie dies wann erwarten 'onShow' wird aufgerufen, die Ansicht wird tatsächlich zum DOM hinzugefügt.

41

Nun, dies ist die show-Methode in Marionette und erklärt die Frage 

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

In Version 3 werden die Regionsereignisse show und before: show nicht mehr In der Ansicht ausgelöst. In den meisten Fällen können Sie render und before verwenden: render-Ereignisse. Wenn Sie wissen müssen, dass sich die Ansicht im DOM befindet, können Sie attach oder dom: refresh verwenden 

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

0
zloctb