刚刚将我的应用程序升级到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不再有效一样。
我想要实现的是创建我的用户模型的实例,然后在多个路径/视图中共享它。
任何想法都会受到赞赏。
答案 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