2013-10-30 63 views
0

我试图创建一个Ember.Route,我需要相应的模板来了解当前路径的路径。我知道那里有ApplicationController.currentPath,但是我的路线是setupController()我可以得到ApplicationController,但是如果我得到currentPath属性,它将返回undefined控制器的创建顺序

这是为什么?

这是我的代码(简化为只显示问题):

AxpoEM = Ember.Application.create({}); 

AxpoEM.Router.map(function() { 
    this.route('something', { path: '/'}) 
}); 

AxpoEM.SomethingRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 
     var path = this.controllerFor('application').get('currentPath'); 
     controller.set('path', path); 
    } 
}); 

这是HTML:

<script type="text/x-handlebars" data-template-name="something"> 
    Path: {{path}}  
</script> 

这里是一个(非)工作小提琴:

http://jsfiddle.net/Nxq6K/2/

回答

0

我找到了解决办法。有没有需要访问ApplicationController,有一个routeName财产每条路线:

AxpoEM.SomethingRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 
     var path = this.get('routeName'); 
     controller.set('path', path); 
    } 
}); 

固定小提琴:http://jsfiddle.net/Nxq6K/3/

1

我得到这个工作注入ApplicationController,在SomethingController使用needs

AxpoEM.SomethingController = Ember.ObjectController.extend({ 
    needs: ['application'], 
    path: function() {   
     return this.get('controllers.application.currentPath'); 
    }.property('controllers.application.currentPath') 
}); 

更新小提琴http://jsfiddle.net/marciojunior/bDUyN/

+0

我没有给SomethingController直接访问。有问题的代码位于我的真实路由继承的ParentRoute中,因此没有自动创建的ParentController来执行您的建议。因此,代码应该生活在ParentRoute(我猜)。 –