Ember.js pre4路由器获得其他控制器

时间:2013-01-22 21:12:02

标签: javascript ember.js ember-router

  

可能重复:
  Accessing controllers from other controllers

在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 个答案:

答案 0 :(得分:3)

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

Accessing controllers from other controllers

答案 1 :(得分: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"))
    }
})

答案 2 :(得分:2)

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

参见http://emberjs.com/guides/routing/setting-up-a-controller/

的最后一部分

答案 3 :(得分:2)

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

this.controllerFor('abs');

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