Короткая история ... У меня есть вложенные представления, но только события верхнего уровня могут работать с событиями, потому что я передаю только свойство 'el' представлению верхнего уровня.
Длинная история ...
Я создаю проект временной шкалы с использованием магистрали в качестве клиентского приложения JS / GUI.Мой шаблон для рендеринга горизонтальной временной шкалы выглядит следующим образом:
<script type="text/template" id="yearGroups">
<![CDATA[
<% _.each(columns, function(item,i) { %>
<div class="yearGroup">
<h2><%= item.yearLabel %></h2>
<div class="years">
<% _.each(item.years, function(year, b) { %>
<div class="year">
<% _.each(year.searchGroups, function(sg, sg_index) { %>
<%= jQuery(sg.viewEl).html() %>
<% }); %>
</div>
<% }); %>
</div>
</div>
<% }); %>
]]>
</script>
Может быть несколько поисков и, следовательно, несколько поисковых групп в год.Каждая searchGroup содержит eventBlocks в качестве оболочки для каждого результата поиска.
Ниже приведен фрагмент кода из цикла, который создает SearchGroupViews (который создает eventBlocks, не показанные здесь).
var events = eventCollection.getEventsInYear(year);
if(events.length > 0) {
var sgv = new SearchGroupView({results: events, searchID: 'search1'});
this.searchGroups.push(sgv);
renderedResults.push({viewEl:sgv.render().el});
}
renderedResultsзатем в конечном итоге передается в шаблон следующим образом:
$(this.el).html(this.template({columns:col}));
... и отображается под каждым .year с использованием:
jQuery(sg.viewEl).html().
Все это означает, что мои вложенные представления неЯ не получаю никаких событий, потому что у них нет контейнера div, переданного с использованием атрибута 'el'.У них нет контейнера, потому что он отображается после того, как все представления построены (см. Первый блок кода).
Мое текущее решение состоит в том, чтобы использовать глобальный EventManger, который можно использовать в качестве обработчика событий для уведомления представлений, когдапредставление верхнего уровня вызывает eventManger.trigger (..).Это не идеально.
Должно ли быть решение, позволяющее моим вложенным представлениям отслеживать события после их отображения?Или мне нужно предварительно визуализировать шаблон представления верхнего уровня и указать атрибуты el, такие как {el: '.year.yearID-1984'} и {el: '.searchGroup.groupID-6'} ??
В идеале я мог бы визуализировать sg.viewEl, а не просто вывод html из этого объекта, и представление тогда само знало бы, где оно находится. ... но я знаю, что это невозможно: (
Заранее спасибо. Надеюсь, это понятно.