У меня есть настройка вложенного просмотра, которая может немного углубиться в мое приложение. Я мог бы подумать о множестве способов инициализации, рендеринга и добавления подвидов, но мне интересно, какова общая практика.
Вот пара, о которой я подумал:
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 с добавлением. Представления инициализируются на ранней стадии, поэтому в функции рендеринга не так много всего сразу.
Минусы: Вы вынуждены повторно делегировать события (), что может быть дорогостоящим? Функция рендеринга родительского представления захламлена всем рендерингом подвидов, который должен произойти? У вас нет возможности установить tagName
элементы, поэтому шаблон должен поддерживать правильные имена тегов.
По-другому:
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);
}
Плюсы: вам не нужно повторно делегировать события. Вам не нужен шаблон, который просто содержит пустые заполнители, и ваши tagName возвращаются к определению представлением.
Минусы: теперь вы должны убедиться, что все добавлено в правильном порядке. Визуализация родительского представления по-прежнему загромождена визуализацией подпредставления.
С 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 ++. Если вы спросите меня, это ключевое слово с очень неудачным названием.