Один из разработчиков интерфейса задал мне этот вопрос, и я не был точно уверен, как сформулировать свою позицию, но он заставил меня задуматься:
Таким образом, соглашение в Backbone (или Backbone.Marionette) состоит в том, чтобы отображать представление, связанное с шаблоном, а затем выгружать или добавлять созданный/композитный HTML-код результирующего представления в существующий контейнер, как таковой:
this.$el.append(this.subview.render().$el);
Однако для этого, конечно же, требуется элемент DOM на странице, которая уже была визуализирована, чтобы выгрузить в нее это только что визуализированное представление. Это приводит к следующим явлениям:
<ul id="scheduler-loadroutegroups" class="full-height"></ul>
or
collectionView.$("#scheduler-loadroutegroups").append(itemView.el);
То есть пустые контейнеры, которые в конечном итоге ожидают содержимого.
Очевидно, что этот шаблон рендеринга и добавления является основной концепцией Backbone, и наличие контейнеров для размещения контента кажется абсолютно необходимым.
Вопрос моего коллеги заключался в том, можно ли использовать шаблон шаблона MVC на стороне сервера, в котором вам не понадобятся НИКАКИЕ пустые контейнеры:
<ul id="scheduler-loadroutegroups" class="full-height">
{{#developers}}
<ul>
{{#pets}}
<li>{{name}}</li>
{{/pets}}
</ul>
{{/developers}}
</ul>
В этом случае, скажем, разработчики представляют набор моделей, а питомцы представляют набор моделей. Каждому из них потребуется собственное представление/подпредставление с прикрепленными к ним событиями.
Я предполагаю, что проблема с более классической системой шаблонов MVC на стороне сервера заключается в том, что в представлениях и связанных с ними шаблонах будет отсутствовать детальный контроль над ограничением контекста и привязкой событий, на который опирается Backbone.
Все примеры/документация Backbone, которые я видел, используют этот шаблон "пустой контейнер/дополнение". Возможно ли поступить иначе? Почему или почему бы и нет?
el
не обязательно должен быть существующим элементом) . - person Jack   schedule 01.02.2013el
представления на новый элемент (повторно делегируя хеш событий), но вы можете в любой момент вставить его в какой-нибудь элемент DOM (в том числе просто прикрепить его к телу (чего вы, вероятно, не захотите делать)). - person Jack   schedule 01.02.2013