自更改为路由器v2后无法创建控制器绑定

时间:2013-01-28 15:24:33

标签: ember.js

刚刚将我的应用程序升级到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不再有效一样。

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

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

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

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

在您的示例中,您有一个IndexController和一个UserController,要从userController中访问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}}

答案 1 :(得分:1)

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