我想监视 App.Router.router.currentState 以激活/停用导航链接。类似于此处解释的内容:https ://stackoverflow.com/a/13312466/674525
但是,属性 currentState 似乎不再存在于路由器中。App.get('Router.router.currentState') 返回未定义。
我想,它在最近的 Ember 版本中发生了变化。还有另一种方法吗?
我想监视 App.Router.router.currentState 以激活/停用导航链接。类似于此处解释的内容:https ://stackoverflow.com/a/13312466/674525
但是,属性 currentState 似乎不再存在于路由器中。App.get('Router.router.currentState') 返回未定义。
我想,它在最近的 Ember 版本中发生了变化。还有另一种方法吗?
我相信使用新 Ember 构建的“教科书”方式将是:
App.SomeController = Ember.Controller.extend({
needs: 'application',
someFunction: function(){
var state = this.get('controllers.application.currentPath');
}
})
对我来说,当前版本有点复杂,但至少它有效:
var router = App.__container__.lookup("router:main"); //lookup the router
var currentHandlerInfos = r.router.currentHandlerInfos; //there are multiple handlers active at one time
var activeHandler = currentHandlerInfos[currentHandlerInfos.length - 1]; // the last item in the array is the current handler with properties like name, context, handler (Ember.Route)
var activeRoute = activeHandler.handler; //your route object
此代码的灵感来自阅读此Ember Source。我还没有在一个有很多路线的复杂应用程序中测试它,但我非常有信心,它会正常工作。也许有人有更精简的方式来做到这一点:-)
行。解决了这个问题。似乎 currentPath 是在 applicationController 实例中设置的。所以我这样做了:
App = Em.Application.create({
currentPath: '',
ApplicationController : Ember.Controller.extend({
updateCurrentPath: function() {
App.set('currentPath', this.get('currentPath'));
}.observes('currentPath')
}),
...
});
然后,我可以从代码中的任何位置绑定或观察 App.currentPath 并对其更改做出反应。
这个例子来自我的组件。所有实体都有属性 - 容器。
GetCurrentPath:->
app = @container.lookup('controller:application')
return app.get 'currentPath'