新的Ember.js路由器已经发生了很多变化。我已经迁移了大部分内容,但是有一个用例我似乎无法适应Ember.js的做事方式。
说我有一些带有控制器的应用程序。其中一些控制器属于App.Router
中的路径,而其中一些控制器不属于我的I18nController
。这是一个非路由器控制器,可确保通过Handlebars帮助程序在整个应用程序中翻译内容。
我还有一个App.UserController
,其App.User
的记录为content
。
以前,我能够通过相当丑陋的App.I18nController
在App.UserController
和localeBinding: 'App.router.userController.content.locale'
之间设置绑定,允许我在本地化时随时读取用户的语言环境。
然而,使用新的路由器,这已不再可能。
我的问题是:如何使用新路由器设置此绑定?
答案 0 :(得分:3)
使用新路由器,有几种不同的策略可用于设置控制器之间的绑定(依赖关系)。一种选择是在路由定义中的setupControllers回调中设置this.controllerFor
。另一种方法是在创建应用程序之前注册用于注入的依赖项。 this github issue中讨论了这些和其他几个选项。如果您遵循该线程,您将找到这些不同策略的代码示例。它似乎还没有建立真正的约定,但我喜欢App.container.injection("controller", "settings", "controller:settingsController")
方法之类的调用,因为它非常具有说明性和清晰。