Backbone: подпредставления, оболочка div по умолчанию и делегированные события

У нас есть два основных представления: родительское представление (PersonView) и его подпредставление (LocationView). Их шаблоны в нотации Усов следующие:

PersonView template:
    <h2>{{fullName}}</h2>
    <div>
        <h3>Address:</h3>
        {{{location}}}
    </div>

LocationView template:
    <hr />
    <dl>
        <dt>City:</dt>
        <dd>{{city}}</dd>
        <dt>Place:</dt>
        <dd>{{place}}</dd>
    </dl>

ЗАМЕТЬТЕ, что у этих шаблонов НЕТ родительского элемента; таким образом, Backbone по умолчанию назначит им элемент «div» в свойстве «el».

В методе «рендеринга» PersonView, как мы можем добавить визуализированный HTML-код LocationView в «PersonView.el» БЕЗ потери событий LocationView и БЕЗ ДОБАВЛЕНИЯ элемента «div» по умолчанию для «LocationView.el»?

Мы испробовали множество способов, и если мы удалим свойство «el» подпредставления, мы всегда потеряем события (в подпредставлениях), но если мы сохраним это «el», то у нас возникнут проблемы, если мы хотим связать его с событиями jQuery. :-(

У кого-нибудь есть решение по этому поводу? Заранее спасибо.


person Peter Pastor    schedule 01.03.2013    source источник
comment
Рассматривали ли вы установку tagname: 'dl' в LocationView, а затем удаление тега ‹dl› из шаблона? Тогда Backbone создаст элемент ‹dl› вместо ‹div›.   -  person Paul Hoenecke    schedule 01.03.2013


Ответы (1)


Чтобы уточнить мой комментарий...

LocationView:

var LocationView = Backbone.View.extend({
    tagName: 'dl'
});

Шаблон LocationView:

<dt>City:</dt>
<dd>{{city}}</dd>
<dt>Place:</dt>
<dd>{{place}}</dd>

Шаблон PersonView:

<h2>{{fullName}}</h2>
<div>
    <h3>Address:</h3>
    <hr />
    {{{location}}}
</div>

Теперь в экземплярах LocationView this.el будет <dl> вместо <div>.

person Paul Hoenecke    schedule 01.03.2013
comment
Здравствуйте, Пол. Спасибо, но вы пропустили ‹hr /› внутри шаблона. Эти два шаблона не имеют корневого элемента: ни div, ни dl, ничего. - person Peter Pastor; 01.03.2013
comment
В представлении Backbone всегда есть корневой элемент, этого не обойти. Таким образом, кажется хорошим решением для корневого элемента LocationView быть элементом dl, а затем переместить hr в шаблон PersonView, я думаю. Или вы сохраняете div в качестве корневого элемента и соответствующим образом меняете свой css. - person Paul Hoenecke; 01.03.2013