2012-01-19 4 views
4

Backbone.Routerには、ルーティングを行う前と後の両方にイベントが存在しますか。 私のアプリケーションはjQuery.mobileで動作し、ルートを実行する前に$ .mobile.changePageへの呼び出しが必要でした。コントローラでは$ .activePageによって現在表示中のページにアクセスできます。コントローラの動作が完了したら、ドキュメント上のcreateイベントをトリガして、$ .mobileによって新たに作成された要素が「強化」されるようにする必要があります。 私はloadUrlバックボーンルータのイベント

Backbone.history.loadUrl = (function(old ){ 
    return function() { 
     Router.trigger("all:before"); 
     old.apply(Backbone.history, arguments); 
     Router.trigger("all:after"); 
    } 
})(Backbone.history.loadUrl ); 



//Router.initialize 
initialize: function() { 
    this.bind("all:before", function() { 
     $.mobile.changePage(window.location.hash.split("/")[0] || "home", { changeHash:false}); 
    }); 

    this.bind("all:after", function() { 
     $.mobile.activePage.trigger('create'); 
    }); 
    } 

を置き換えることによって、これをしなかったが、このような存在かもしれないいくつかの組み込みのイベントですか?

+1

、私はあなたが 'Backbone.history.loadUrl'機能を包んだ道が大好きです。本当にきれい! – surjikal

答えて

9

Backbone.Routerには前後のイベントはありません。ルータのルートの1つが一致している - (ルータ):

バージョン0.5.3は、次のルータのイベント(all events here

"[名前]ルート" をサポートしています。 githubのトランク内

ない、それがされる放出するために確認してください、しかし、一般的なルートイベントが開発されている、 #419をコミットし、この機能を持っていますが、それは新しいバージョンでリリースされていない、まだ

そこが出回っ報告されています前のイベントの問題(アイデア)はgithub issue on thatにチェックしてください。

あなたが本当にすでにイベント後に必要がある場合に、イベントがそこにいない前に、イベントの後、後で をいくつかの時間を来る、あなたはに結合することによって、自分自身、 にそれを置くことができる方法があります'all'イベントではなく、すべての 'route:routename'イベントを含むすべてのイベントをキャッチします。イベント名を分割し、ルートで始まる場合は一般的なルートイベントがあります。 (もちろん、この缶を除去し、変更後のイベントは、背骨のリリースのいずれかでリリースされている場合さ)オフトピック

this.bind('all', function (trigger, args) { 
       var routeData = trigger.split(":"); 
       if (routeData[0] === "route") { 
        // do whatever here. 
        // routeData[1] will have the route name 
       } 
     }); 
+0

ちょうど頭が上がって、 "すべての"イベントが最後に誘発されたことがあります。したがって、ルートの場合は、後のイベントのように機能します。 – KTastrophy

+1

バックボーンバージョン1.0の "route"イベントは現在 – drogon

+2

"route"イベントはその後まで発生しません – Danny

関連する問題