Подтвердить что ты не робот

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

Я новичок в Marionette.js, и хотя я рефакторинг моего существующего кода Backbone.js, я заметил, что есть два обратных вызова на взгляд Marionette (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);
}
4b9b3361

Ответ 1

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

onRender: этот метод выполняется каждый раз, когда визуализируется представление.

Ответ 2

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

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

onRender: этот метод выполняется каждый раз при визуализации представления.

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

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

Ответ 3

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

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

Ответ 4

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

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