марионетка.JS посмотреть разницу между onShow и onRender?


Я новичок в марионетке.JS и пока я рефакторинг мой существующий костяк.JS code, я заметил, что есть два обратного вызова на Marionette view (itemview), которые мне показались похожими, то есть onRender и onShow. В чем разница и лучший способ их использования ?

Однако, глядя на исходный код, я думаю, что события" render "и" show "возникают внутри"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);
}
4 18

4 ответа:

onShow : просмотр сам по себе не вызывает событие "показать". Он запускается областью. Так что в некоторых случаях это не будет называться.

onRender : Этот метод выполняется при каждом отображении представления.

Я думаю, что в ответе Виталия есть что-то не совсем правильное. Правильным будет:

OnShow: представление само по себе не вызывает событие "show". Он запускается областью. Так что в некоторых случаях это не будет называться.

OnRender: этот метод выполняется при каждом отображении представления.

Обратите внимание, что'onRender' выполняетсяне означает, что объект фактически добавляется в DOM . Это просто означает, что он был только что отрисован (заполнен данными шаблон, у вас есть это.$Эль заниматься и т. д.)

С другой стороны, если 'onShow' вызывается потому, что событие 'show' было вызвано из области, и поскольку области обычно представляют элемент внутри DOM, можно ожидать, что при вызове 'onShow' представление действительно добавляется к DOM.

Ну, это метод show в марионетке, и он объясняет Вопрос

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

В версии 3 события региона show и before: show больше не запускаются на взгляде. Вы можете использовать рендер и раньше:визуализация событий в большинстве случаев. Если вы должны знать, что представление находится в DOM, то вы можете использовать attach или dom: refresh

Информация http://blog.marionettejs.com/2016/08/23/marionette-v3/index.html