У мене є вкладений режим перегляду, який може дещо заглибитися в моє додаток. Існує маса способів ініціалізувати, відображати та додавати підпогляди, але мені цікаво, що таке звичайна практика.
Ось пара, про яку я думав:
initialize : function () {
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template());
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Плюси: Вам не потрібно турбуватися про підтримку правильного замовлення DOM із додаванням. Погляди ініціалізуються на ранніх стадіях, тому в функції візуалізації не так багато, щоб зробити все одночасно.
Мінуси: Ви змушені повторно делегуватиEvents (), що може дорого коштувати? Функція візуалізації батьківського перегляду захаращена всіма рендерингами субпрогляду, які мають відбутися? Ви не маєте можливості встановлювати tagNameелементи, тому шаблон повинен підтримувати правильні тегиNames.
Інший спосіб:
initialize : function () {
},
render : function () {
this.$el.empty();
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
this.$el.append(this.subView1.render().el, this.subView2.render().el);
}
Плюси: не потрібно повторно делегувати події. Вам не потрібен шаблон, який містить просто порожні заповнювачі, і ваш тегName повернеться до визначення перегляду.
Мінуси: Тепер вам потрібно обов’язково додати речі в потрібному порядку. Відображення батьківського подання все ще захаращене поданням підвідного перегляду.
З onRenderподією:
initialize : function () {
this.on('render', this.onRender);
this.subView1 = new Subview({options});
this.subView2 = new Subview({options});
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Плюси: логіка перегляду тепер відокремлена від render()методу подання .
З onRenderподією:
initialize : function () {
this.on('render', this.onRender);
},
render : function () {
this.$el.html(this.template);
//other stuff
return this.trigger('render');
},
onRender : function () {
this.subView1 = new Subview();
this.subView2 = new Subview();
this.subView1.setElement('.some-el').render();
this.subView2.setElement('.some-el').render();
}
Я наче змішував і поєднував безліч різних практик у всіх цих прикладах (так шкода цього), але які з них ви б зберегли чи додали? а що б ти не робив?
Короткий огляд практик:
- Ігнорувати підпогляди в
initializeчи вrender? - Виконувати всю логіку візуалізації під-виду в
renderчи вonRender? - Використовувати
setElementабоappend/appendTo?
closeметод і спосіб, onCloseякий очищає дітей, але мені просто цікаво, як інстанціювати і робити їх в першу чергу.
deleteв JS не є тим самим, що і deleteвід C ++. Це дуже погано назване ключове слово, якщо ви запитаєте мене.