2012-03-14 7 views
7

各ルーター機能に追加することなく、Backbone.jsルーターが利用されるたびにカスタム機能をトリガーする簡単な方法があるかどうか疑問です。今私のスクリプトは次のようになります。ルータが使用されるたびにBackbone.jsトリガー機能

var AppRouter = Backbone.Router.extend({ 

    routes: { 
     '' : 'index', 
     'test': 'test', 
    }, 

    initialize: function() { 
    }, 

    index: function() { 
     customFunction(); 
     indexView.render(); 
    }, 

    test: function() { 
     customFunction(); 
     testView.render(); 
    }, 

}); 

私はそれを持ってしたいと思い、このような何か:

var AppRouter = Backbone.Router.extend({ 

    routes: { 
     '' : 'index', 
     'test': 'test', 
    }, 

    initialize: function() { 
    }, 

    index: function() { 
     indexView.render(); 
    }, 

    test: function() { 
     testView.render(); 
    }, 

    change: function() { 
     customFunction(); 
    } 

}); 

誰もが何か提案がありますか?

答えて

19

Routerでルートが照合されるたびに、クラスが特定のルート一致をリッスンできるように、一致するルートの名前でroute:[name]イベントが発生します。すべてのバックボーンオブジェクトは、イベントが発生したときに起動するallイベントもサポートします。

Routerallイベントにバインドするためにこれを利用できます。これは、ルータがルーティングを行うたびに発生します。

initialize: function() { 
    this.bind("all", this.change) 
}, 

マッチしたルートに興味がある場合は、最初のパラメータとしてバインドされた関数に渡されます。

詳細here in the FAQ

+0

ありがとう、魅力的なように働いた!私はthis.bind()をbind()の代わりに使用しなければなりませんでしたが、 – hampusohlsson

+0

私はその答えを更新します。 – obmarg

+0

'.navigate'コールの一環として' {trigger:true} 'を持っている場合、ルートが"実行中 "の前か後にイベントが発生しますか? – tkone

9

バインドを書くより(新)バックボーンの方法は次のとおりです。

initialize: function() { 
    this.listenTo(this, "all", this.change) 
}, 

より良いあなたが私に言わせればちょうどrouteだろう聞きます。 allは、2つのイベントをトリガしているので、私はこれらを考える:

"ルート:[名]"(paramsが) - 特定のルートがマッチした ときにルータによって発生します。
"route"(route、params) - ルート が一致したときにルータによって起動されます。

+2

これは2015年のより良い答えです –

+2

それは2014年に作られました:) –

0

私はバックボーンが初めてです。ローレンズの答えに続いて、私は各ルートの変更を下記の電話番号で聞いた。

app_router.on('route', function(e){ 
    console.log(e); 
}); 
関連する問題