марионетка.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 ответа:
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