1

当然答案是“当你想展示应用程序时使用它”。好的,这很公平。但是子视图呢?我正在使用 Ted 的示例:https ://github.com/t2k/backbone.marionette-RequireJS 。该示例只有一个控制器设置。我有六个控制器,我在 Ted 的示例中复制了 libraryController。每个示例都有以下代码:

    var _initializeLayout = function() {
       console.log('initialize Start Layout...');
       Controller.layout = new Layout();
       Controller.layout.on("show", function() {
           vent.trigger("startLayout:rendered");
    });
    vent.trigger('app:show', Controller.layout);  <!-- is this needed for each?
};

所以我的每个控制器中都有该代码。StartLayout 有两个区域,它们有自己的视图,它们是 InspectorController 和 PlayerController 的入口点。

这些控制器中的每一个都具有:

vent.trigger('app:show', Controller.layout);

所以在我看来,我可能会比需要更多地调用“app:show”。每个需要初始化的控制器一次。

这是必要的吗?当我处理应用程序的直接子视图时,我可以理解,但如果我深入到 PlayerController 并且应用程序视图不可见,这似乎有点矫枉过正。

谢谢,

安德鲁

4

1 回答 1

3

尽量不要想到“调用”app:show。这不是一个函数,它是一个事件。一个事件可以有任意数量的订阅监听它。对于此应用程序,该事件只有一个侦听器:

vent.on('app:show', function(appView) {
  app.content.show(appView);
});

在这种情况下,它告诉content区域将事件中包含的任何视图显示为appView. 因此,如果您想content用您自己的视图替换该区域,您应该app:show使用您希望该content区域显示的任何视图的参数来触发。

content绑定到一个 DOM 元素,并且无论何时调用content.show(someView),该 DOM 元素的内容都会被someView.render().el.

我建议阅读LayoutsRegionsEvents

希望这可以帮助。

于 2013-02-03T20:19:28.657 回答