Почему дополнительный div отображается при рендеринге представления в backbone.js
Почему дополнительный div отображается при рендеринге представления в backbone.js
Backbone.View.extend({
template :_.template(
'<li id="user-<%=user.username%>" class="pp-entry group">'+
'<img src="i/pp-pic-1.png" class="pp-pic" alt="" />'+
'<span class="whisper-mode-on hide" title="Whisper mode on"></span>'+
'<h6 class="pp-name"><%=user.firstname%> <%if(user.lastname!="null"){%><%=user.lastname%><%}%></h6>'+
'<p id="chat-<%=user.username%>"class="pp-msg"></p>'+
'</li>'),
initialize: function() {
_.bindAll(this, 'render', 'close');
this.model.bind('change', this.render);
this.model.view = this;
},
// Re-render the contents of the User item.
render: function() {
$(this.el).html(this.template(this.model.toJSON()));
$("#participant-window").prepend(this.el);
}
});
когда он получает, он рендерит так:
<ul id="participant-window" class="scroll-pane" style="overflow: hidden; padding: 0px; width: 357px;">
<div>
<li id="user-ashutosh" class="pp-entry group" style="cursor: default;">
<img class="pp-pic" alt="" src="i/pp-pic-1.png">
<span class="whisper-mode-on hide" title="Whisper mode on"></span>
<h6 class="pp-name">Ashutosh </h6>
<p id="chat-ashutosh" class="pp-msg"></p>
</li>
</div>
</ul>
почему li вставляется в div, как мне это остановить?
2 ответа
В этой строке:
$(this.el).html(this.template(this.model.toJSON()));
... вы устанавливаете содержимое this.el
на выходе шаблона. Если как-то el
переменная-член уже была инициализирована как существующая div
элемент, вы просто меняете его содержимое, а затем добавляете #participant-window
,
Возможно, попробуйте:
this.el = $(this.template(this.model.toJSON())));
Если вы не переопределите это Backbone.View's el
свойство инициализируется тегом div.
Так $(this.el).html(this.template(this.model.toJSON()));
поместит оцененный шаблон в тег div.
Из вашего примера кода похоже, что вы действительно хотите сделать, это установить this.el
в $("ul#participant-window")
, Тогда все, что вам нужно сделать в рендере, это
render: function() {
$(this.el).html(this.template(this.model.toJSON()));
}