我遇到了一个问题,我找不到任何留档,所以我不确定是否有可能。
我有一个运行良好的主干应用程序,它根据传入到pubsub节点的iq数据包为我构建了一个“井”列表(我们称之为backboneApp1)。
在该主干井模板的末尾,如下所示:
<div class='row' id='row-participants-<%= chatid %>' style='display: none'>
</div>
这是一个div,我希望将参与者列表附加到该div中(在加载文档并调用MyApp.start时,该div不存在)。
此参与者列表是使用主干网木偶网基于另一组传入的iq数据包构建的,该数据包列出了特定聊天id的参与者(我们称此为backboneApp2)。
因此,在定义要使用的主干区域时,它分为两部分。
首先,添加区域并定义唯一名称和DOM:
MyApp.addRegions({
participantsContainer... : "#row-participants-..."
})
第二个是你告诉骨干显示视图的地方:
MyApp.participantsContainer.show(aParticipantsView);
因此,在我上面的场景中,我需要动态创建区域(我在哪里执行此操作?是否可以在initialize for backboneApp1中执行此操作,因为我正在将chatid传递到井集合中的每个模型中?或者可能在将数据发送到主干之前,在pubsub处理程序函数中执行此操作?)。
然后我需要告诉backboneApp2在基于chatid的正确区域中显示(),这就是我卡住的地方(chatid也被传递,集合中的每个模型都有一个参与者名称值和一个与之关联的chatid值)。如果我计划将参数传递给区域,那么定义区域的第二部分应该放在哪里?
请询问是否需要进一步解释。
非常感谢。
亲切问候,,
加里·谢吉尔
编辑:这似乎是解决方案,但我不确定如果没有下划线主干:视图中的视图列表,该怎么做
我的代码:
创建参与者数组
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
...
});
项目视图
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? -->
</div>
</script>
解决了使用下划线在模板中呈现集合。