У мене є вкладений режим перегляду, який може дещо заглибитися в моє додаток. Існує маса способів ініціалізувати, відображати та додавати підпогляди, але мені цікаво, що таке звичайна практика.
Ось пара, про яку я думав:
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 ++. Це дуже погано назване ключове слово, якщо ви запитаєте мене.