多个Marionette.ItemView在同一"区域"

时间:2014-02-27 14:24:11

标签: javascript backbone.js marionette

鉴于 -

两个木偶应用程序,每个应用ItemViewtemplate同一个region,最后我创建了ItemView - < / p>

<script>
 ManagerMarionette1 = new Marionette.Application();
        // region which affect ...
        ManagerMarionette1.addRegions({
            mainRegion: "#mainRegion",
        });

        // view item
        ManagerMarionette1.RegionItemView = Marionette.ItemView.extend({
            template: _.template('<div class="region">Marionette 1</div>'),
            onRender: function () {
                this.$('.region');
            }
        });



        ManagerMarionette2 = new Marionette.Application();
        // region which affect ...
        ManagerMarionette2.addRegions({
            mainRegion: "#mainRegion",
        });

        // view item
        ManagerMarionette2.RegionItemView = Marionette.ItemView.extend({
            template: _.template('<div class="region">Marionette 2</div>'),
            onRender: function () {
                this.$('.region');
            }
        });
...
MyMarionette1 = ManagerMarionette1.RegionItemView;
        myMarionette1 = new MyMarionette1();

        MyMarionette2 = ManagerMarionette2.RegionItemView;
        myMarionette2 = new MyMarionette2();

</script>

region代码是

<div id="mainRegion"></div>

两个木偶ItemView渲染的两个按钮 -

<button onclick="ManagerMarionette1.mainRegion.show(myMarionette1)">Show Marionette 1</button>
    <button onclick="ManagerMarionette2.mainRegion.show(myMarionette2);">Show Marionette 2</button>

显然它看起来是锻炼 - 每个button渲染它的ItemView但是在点击这些button之后,它只在一个按钮中渲染,另一个停止渲染。 / p>

我如何管理Marionette应用,以便为每个按钮呈现区域正常?

修改

根据 @David_Sulc 建议的新版本 - Here

1 个答案:

答案 0 :(得分:3)

这是一个非常糟糕的主意:通常如果您在同一区域中显示2个不同的视图,则第二个show调用将关闭当前显示的视图(以及sotp监听事件等)。但在你的情况下,你使用了2个不同的木偶区域,所以这种情况不会发生,而且每次在2个视图之间切换时,你可能会造成内存泄漏。

相反,您应该使用在主应用程序中显示视图的子模块(请参阅https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.application.module.md#defining-sub-modules)。