提问者:小点点

主干/木偶-如何定义正确的区域


我遇到了一个问题,我找不到任何留档,所以我不确定是否有可能。

我有一个运行良好的主干应用程序,它根据传入到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='#'>
        &times;
    </a>
    ...
    <div class='row' id='row-participants-<%= chatid %>' style='display: none'>
<!-- CUSTOM CODE SHOULD BE HERE? -->
    </div>

</script>

共1个答案

匿名用户

解决了使用下划线在模板中呈现集合。