0

刚刚将我的应用程序升级到 1.0.0-pre.4 并且正在将我的路由器更改为新的路由器 API,但是我似乎无法再在我的控制器之间创建绑定。

所以在我的主 ApplicationController 中,我有以下内容:

App.ApplicationController = Em.ArrayController.extend({
    user: App.User.create()
});

然后在路由器 API 的 v1 中,我有以下内容:

App.IndexController = Ember.ArrayController.extend({
    userBinding: 'App.router.applicationController.user',
});

但是,随着路由器 API 转换为 v1,App.router 不再被定义。我尝试的一切似乎都不起作用,即使将 userBinding 设置为 'App.ApplicationController.user' 也不起作用 - 就好像 applicationController 不再起作用一样。

我想要实现的是创建我的用户模型的一个实例,然后在多个路由/视图中共享它。

任何想法,将不胜感激。

4

2 回答 2

1

不幸的是,Ember 隐藏了单例控制器的所有实例,以防止用户实施不良实践代码。您不应该显式引用控制器,而应该将所有内容解耦并使用依赖注入将事物传递给您的控制器。

在之前的 Ember 版本中,我们connectControllers允许您将控制器相互连接,但现在在最新版本的 Ember 中,我们只需在路由器中使用“set”来传递其他控制器。

在您的示例中,您有一个 anIndexController和一个UserControlleruserController要从 中访问indexController,您需要执行以下操作:

(请记住,所有这些都发生在 Ember 的路由器中,您可以在此处阅读更多信息:http: //emberjs.com/guides/routing/setting-up-a-controller/

App.UserRoute = Ember.Route.extend({
  setupController: function(controller) {
    this.controllerFor('index').set('userController', controller);
  }
});

indexController现在可以从userController. 在模板中,这可能如下所示:

{{controller.userController.name}}
于 2013-01-28T16:41:49.320 回答
1

在 ObjectControllers 中使用“需要”还有另一种解决方法。这是有关如何使用它的参考。 http://eviltrout.com/2013/02/04/ember-pre-1-upgrade-notes.html

于 2013-02-06T04:10:45.307 回答