2013-02-22 45 views

回答

8

好的。解決了這個問題。看起來,currentPath是在applicationController實例中設置的。所以我這樣做:

App = Em.Application.create({ 

    currentPath: '', 

    ApplicationController : Ember.Controller.extend({ 
     updateCurrentPath: function() { 
      App.set('currentPath', this.get('currentPath')); 
     }.observes('currentPath') 
    }), 

    ... 

}); 

然後,我可以綁定或代碼的任何位置觀察App.currentPath並對其變化作出反應。

9

這引起了那種複雜與當前版本的我,但至少它的工作原理:

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啓發。我還沒有在一個有很多路線的複雜應用中測試它,但我非常有信心,它會正常工作。也許有人有這樣做的更瘦方法:-)

+0

是啊,這就是我要怎樣做。不幸的是,我無法綁定currentHandlerInfos來跟蹤它的cahnges。解決這個問題有點不同。 – 2013-02-24 10:22:01

+0

然後更新你的問題plz,因爲它不反映綁定它的要求。 – mavilein 2013-02-24 10:35:50

+1

是的。我舉了一個我想要達到的例子。 – 2013-02-26 07:17:27

11

我相信「教科書」的方式做到這一點使用新的灰燼建立將是:

App.SomeController = Ember.Controller.extend({ 
    needs: 'application', 
    someFunction: function(){ 
     var state = this.get('controllers.application.currentPath'); 
    } 
}) 
+0

此技術[在文檔中找到](http://emberjs.com/guides/understanding-ember/debugging/#toc_get-current-route-name-path) – dwhite 2014-01-29 14:14:48

0

從我的組件這個例子。所有實體都有財產 - 容器。

GetCurrentPath:-> app = @container.lookup('controller:application') return app.get 'currentPath'

相關問題