这是我发现的另一篇文章的扩展名:Backbone: A list of views inside a view
我无法理解这一点(之前我从未使用过下划线)所以我认为最好发布一个关于此的新主题。
方案
我有一个群聊的模型,它创建并列出了各种信息。这包括该群聊的参与者列表。我需要将该列表显示为正在渲染的模型的一部分。
代码
创建参与者数组
var participants = [];
$(iq).find('participants').each(function() {
var participantsNodes = this.childNodes;
for (var i = 0; i < participantsNodes.length; i++) {
var participantAttr = participantsNodes[i].attributes
var participant = participantAttr[0].nodeValue;
participants.push({"name": participant, "chatid": chatid});
}
});
...
model.set({
participants : participants,
chatid : chatid
...
});
ItemView
GroupChatView = Backbone.Marionette.ItemView.extend({
template : "#template-groupchat",
tagName : 'div',
className : 'alert alert-custom',
initialize: function(){
this.$el.prop("id", this.model.get("chatid"));
},
...
正在使用的模板
<script type="text/template" id="template-groupchat">
<a id='close-<%= chatid %>' class='close hide' data-dismiss='alert' href='#'>
×
</a>
...
<div class='row' id='row-participants-<%= chatid %>' style='display: none'>
<!-- CUSTOM CODE SHOULD BE HERE? My attempt:
<% _.each(participants, function () { %>
<%= name %>
<% }); %>
-->
</div>
</script>
这会不断返回错误,指出“name”不存在。我不确定我在原帖中做错了什么,我想我正在将participants
数组错误地传递给underscore.each()
部分。
答案 0 :(得分:2)
我觉得其中一个问题是您没有将任何参数传递给_.each
方法。
<% _.each(participants, function (participant) { %>
<%= participant.name %>
<% }); %>
希望它能解决你的问题。
答案 1 :(得分:2)
使用_.each函数的正确方法是:
<% _.each(participants, function (element,index) { %>
<%= element.name %>
<% }); %>