Ответ 1
onShow
: сам просмотр не вызывает событие show. Он запускается по региону. Поэтому в некоторых случаях это не будет вызываться.
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);
}
onShow
: сам просмотр не вызывает событие show. Он запускается по региону. Поэтому в некоторых случаях это не будет вызываться.
onRender
: этот метод выполняется каждый раз, когда визуализируется представление.
Я думаю, что в ответ Виталия есть что-то не совсем правильное. Правильно будет:
onShow: сам просмотр не запускает событие show. Он запускается по региону. Поэтому в некоторых случаях это не будет вызываться.
onRender: этот метод выполняется каждый раз при визуализации представления.
Обратите внимание, что выполненный 'onRender' не означает, что объект фактически добавлен в DOM. Это просто означает, что он был просто визуализирован (данные заполнены шаблоном, у вас есть это. $El, чтобы иметь дело и т.д.)
С другой стороны, если вызывается 'onShow', потому что событие 'show' было вызвано из региона, а поскольку регионы обычно представляют собой элемент в DOM, вы можете ожидать, что когда "onShow" вызывается, представление действительно добавляется в DOM.
Ну, это метод 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");
}
В версии 3 отображаются события области и до: show больше не срабатывает на вид. Вы можете использовать render и before: рендеринг событий в большинстве случаев. Если вам нужно знать, что представление находится в DOM, тогда вы можете использовать attach или dom: refresh
info http://blog.marionettejs.com/2016/08/23/marionette-v3/index.html