1

ナビゲーション リンクをアクティブ化/非アクティブ化する目的で、App.Router.router.currentState を監視したいと考えています。ここで説明されているように、何か: https://stackoverflow.com/a/13312466/674525

ただし、プロパティ currentState はルーターに存在しないようです。App.get('Router.router.currentState') は未定義を返します。

最近の Ember バージョンで変更されたと思います。これを行う別の方法はありますか?

4

4 に答える 4

11

新しい Ember ビルドを使用してそれを行う「教科書」的な方法は次のようになると思います。

App.SomeController = Ember.Controller.extend({
    needs: 'application',
    someFunction: function(){
        var state = this.get('controllers.application.currentPath');
    }
})
于 2013-06-05T08:21:44.083 に答える
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を読んで着想を得ています。多くのルートを持つ複雑なアプリでまだテストしていませんが、問題なく動作すると確信しています。多分誰かがこれを行うためのより無駄のない方法を持っています:-)

于 2013-02-22T09:24:19.267 に答える
8

Ok。これで解決しました。applicationController インスタンスに currentPath が設定されているようです。だから私はこれをしました:

App = Em.Application.create({

    currentPath: '',

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

    ...

});

次に、コード内の任意の場所から App.currentPath をバインドまたは監視し、その変更に対応できます。

于 2013-02-24T10:26:18.190 に答える
0

私のコンポーネントからのこの例。すべてのエンティティにはプロパティ - コンテナーがあります。

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

于 2015-08-18T07:31:55.697 に答える