1

可能重复:
从其他控制器访问控制器

在 Ember pre2 和之前的旧路由器样式中,您可以从路由器获取其他控制器,所以如果我在一个名为的控制器中,PeopleController我可以做这样的事情

App.PeopleController = Ember.Controller.extend({
     some_computed_property: (function() {
          return this.get('target.otherController.property_i_want');
     }).property('target.otherController.property_i_want')
});

或从调试控制台

> App.router.get('otherController.property_i_want')

这两个都有效。Pre4 / 新的路由风格似乎打破了这一点。如何使用新路由器和 pre4 获得此功能?

4

4 回答 4

3

我问了一个类似的问题;您可以在当前版本中声明依赖项。

从其他控制器访问控制器

于 2013-01-22T23:15:45.237 回答
3

我有一个可怕的黑客:

Em.Route.reopen({init:function(){
  window.App.currentRoute = this;
  this._super.apply(this,arguments);
}})

这使您可以执行以下操作:

App.currentRoute.controllerFor('something');
App.currentRoute.target...

编辑:目前,ember 支持为控制器定义“需求”,并公开容器以进行查找:

App.__container__.lookup("controller:application").get("someProperty")

App.ApplicationController = Em.Controller.extend({
    needs: ["authentication","notifications"],
    init: function(){
       this._super.apply(this,arguments)
       console.log(this.get("controllers.authentication"), this.get("controllers.notifications"))
    }
})
于 2013-01-22T23:21:25.337 回答
2

尝试this.controllerFor('other').get('property_i_want')

请参阅http://emberjs.com/guides/routing/setting-up-a-controller/的最后一部分

于 2013-01-22T21:22:35.263 回答
2

要从控制台访问控制器,debugger;请在您的代码中设置,刷新浏览器,这将在您设置debugger语句的位置停止执行,然后您可以在您所在的范围内访问您的控制器,使用

this.controllerFor('abs');

这在调试模板中也非常有用,您可以插入{{debugger;}}并让您访问控制台中模板的整个范围,例如尝试找出您controller或您view的内容。

于 2013-01-23T05:45:01.090 回答