marionette childViewContainer - 它可以有两个子容器

时间:2014-12-01 11:37:03

标签: marionette

根据我的要求,我需要在两个不同的子容器中显示两组不同的数据。

例如:

ItemView控件

var itemView = new Marionette.ItemView.extend({
    template : "<%=id%><%=name%>",
    model : Model,
    tagName: "tr"
});

CompositeView中

Marionette.CompositeView.extend({
    childView : itemView,
    childViewContainer : "table.employee-table.new",
    template : below html template
});

Html模板:

<div>
    <table class="employee-table">
        <thead>
            <tr>
                <th>id</th>
                <th>Name</th>
            </tr>
        </thead>
        <tbody class="new"></tbody>
        <tbody class="old"></tbody>
    </table>
</div> 

我希望将旧员工分组到旧的(class =&#34; old&#34;)表主体中,并将​​新员工分组为新的(class =&#34; new&#34;)表主体。

1 个答案:

答案 0 :(得分:0)

我没有尝试使用2个容器,但在同一个集合中有2个不同的视图,你可以通过覆盖Marionette.CompositeView中的 getChildView 函数来实现

class Notifications extends Marionette.CompositeView
    template: require './templates/player_notifications'
    childView : Notification
    childViewContainer : "#caption"
    modelEvents:
        "sync" : "render"
    getChildView: (item) ->
        if (item.get('type') == "notification:payment")
            PaymentNotification
        else if (item.get('type') == "notification:player:connected")
            PlayerConnectedNotification
        else if (item.get('type') == "notification:player:discovered")
            PlayerDiscoveredNotification
        else
            Notification

class Notification extends Marionette.ItemView
    template: require './templates/player_notification'

class PaymentNotification extends Marionette.ItemView
    template: require './templates/payment_notification'

class PlayerConnectedNotification extends Marionette.ItemView
    template: require './templates/player_connected'

class PlayerDiscoveredNotification extends Marionette.ItemView
    template: require './templates/player_discovered'

以同样的方式在Marionette.CompositeView中有一个 getChildViewContainer 函数,您可以覆盖它。

或者只需在Backbone.Collection中的fetch中将你的集合拆分为2。