Backbone / Marionette - 如何定义正确的区域

时间:2014-05-02 08:58:48

标签: javascript backbone.js marionette region

我遇到了一个我无法找到任何文档的问题,因此我不确定是否可以这样做。

我有一个运行良好的主干应用程序,它为我建立了一个井"井"基于传入的iq数据包到pubsub节点(让我们调用这个backboneApp1)。

在这个骨干的模板的最后,以下是:

<div class='row' id='row-participants-<%= chatid %>' style='display: none'>
</div>

这是一个div,我希望附上参与者列表(在加载文档和 MyApp.start 被称为。)

此参与者列表正在使用主干木偶基于另一组传入的iq数据包构建,该数据包列出了特定聊天ID的参与者(让我们称之为backboneApp2)。

因此,在定义要使用的主干区域时,它分为两部分。

第一个是添加区域并定义唯一名称和DOM的地方:

MyApp.addRegions({
    participantsContainer... : "#row-participants-..."
})

第二个是告诉骨干网显示视图的地方:

MyApp.participantsContainer.show(aParticipantsView);

所以在上面的场景中,我需要动态创建区域(我该怎么做?可以在 初始化 中为backboneApp1完成,因为我&#39 ; m将chatid传递到我的井中的每个模型中?或者可能在pubsub处理函数中,在我将数据发送到主干之前?)。

然后我需要根据chatid告诉backboneApp2在正确的区域中 show() ,这就是我被困住的地方(chatid也通过了) ,集合中的每个模型都有一个ParticipName值和一个与之关联的chatid值。 如果我打算将参数传递给它,我会在哪里定义区域的第二部分?

请询问是否需要进一步说明。

谢谢。

亲切的问候,

Gary Shergill

编辑:这似乎是解决方案,但我不确定如何在没有下划线的情况下执行此操作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"));
    },

    ...

GROUPCHAT模板

<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 个答案:

答案 0 :(得分:0)

使用下划线解决模板中的集合。