EmberJS:在我的应用程序已经初始化到路由器之后,我如何添加特定的控制器



实际上,我们试图用EmberJs框架构建一个模块化的Web应用程序。在启动时,我们希望加载具有所有核心功能的应用程序。。。。如果用户与应用程序交互,我们希望使用自己的视图和控制器将几个成员小部件重新加载到应用程序中。我的问题是,如何将重新加载的控制器和视图注入到应用程序中?

我尝试以下内容:

App.getPath('router.applicationController.controllers').reopen({
    aController   : this.AController.create()
});

但这似乎不起作用,因为我认为控制器没有注入。

好消息是:您的目标(在启动时加载核心fx,并在用户与应用程序交互时重新加载视图/控制器)对大多数ember应用程序来说是常见的。坏消息是:它并没有像你预期的那样工作,你可能需要进行一些重构。

当路由器初始化时,它将为命名空间中定义的每个控制器类创建单例实例。控制器实例应该是长寿命的,并且应该是轻量级的以进行实例化。当然,他们不应该在init()或类似的东西中加载数据。

当用户在应用程序中导航到各种路线时,请使用connectOutlets()在控制器上设置适当的数据,并将它们绑定到视图。Ember将根据需要自动创建/销毁视图类的实例。所以,基本上,当重新加载控制器时,你想做的任何事情都应该在这里发生。有关如何工作的更多详细信息,我建议查看router.js源代码中的"注入控制器单体"一节:https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/router.js#L295

如果你遵循上述方法,你的应用程序将达到既定的设计目标,而无需将控制器实例注入路由器。

有道理吗?