1

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

我尝试以下:

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

但这似乎行不通,因为控制器没有像我认为的那样注入。

4

1 回答 1

2

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

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

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

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

说得通?

于 2012-07-26T16:54:33.767 回答