实际上我们尝试使用EmberJs框架构建模块化Web应用程序。 在启动时,我们希望使用所有核心功能加载应用程序....如果用户与应用程序交互,我们希望使用自己的视图和控制器将多个ember-widgets重新加载到应用程序。我的问题是,如何将重新加载的控制器和视图注入应用程序?
我试着跟随:
App.getPath('router.applicationController.controllers').reopen({
aController : this.AController.create()
});
但这似乎不起作用,因为控制器没有像我所想的那样注入。
答案 0 :(得分:2)
好消息:您的目标(在启动时加载核心fx并在用户与应用程序交互时重新加载视图/控制器)对于大多数ember应用程序来说是常见的。 坏消息:它不能像你期望的那样工作,你可能需要做一些重构。
初始化路由器时,它将为命名空间中定义的每个控制器类创建单例实例。控制器实例应该是长寿命的,并且应该是轻量级的以实例化。当然,他们不应该在init()或类似的东西中加载数据。
当用户导航到应用程序中的各种路径时,请使用connectOutlets()在控制器上设置适当的数据并将其绑定到视图。 Ember将根据需要自动创建/销毁视图类的实例。因此,重新加载控制器时,您基本上要做的事情应该在这里发生。有关其工作原理的更多详细信息,我建议您查看router.js源代码中的“注入Controller Singletons”部分:https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/router.js#L295
如果您遵循上述方法,您的应用程序将满足规定的设计目标,而无需将控制器实例注入路由器。
有意义吗?