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'); 
     });  
  }

このような組み込みイベントはありますか?

4

1 に答える 1

9

現在、Backbone.Router には前後のイベントはありません。

バージョン 0.5.3 では、次のルーター イベントがサポートされています (すべてのイベントはこちら) 。

"route:[name]" (router) — ルーターのルートの 1 つが一致した場合。

どのリリースになるかはわかりませんが、一般的なルート イベントが開発されています。github トランク コミット#419にはこの機能がありますが、新しいバージョンではまだリリースされていません。

イベント前にすでに報告されている問題 (アイデア) があります。ここでgithub の問題を確認してください。

そのため、前のイベントはまだそこにはありません。後イベントはしばらく後に発生します。本当に後イベントが必要な場合は、代わりに「all」イベントにバインドすることで、自分でそれを配置する方法があります。すべての 'route:routename' イベントを含むすべてのイベントをキャッチします。次に、イベント名を分割するだけで、ルートで始まる場合は、一般的なルート イベントがあります。(バックボーンのリリースの 1 つでアフター イベントがリリースされた場合、これはもちろん削除および変更できます)

    this.bind('all', function (trigger, args) {
               var routeData = trigger.split(":");
                if (routeData[0] === "route") {
                   // do whatever here.  
                   // routeData[1] will have the route name
                }
        });
于 2012-01-19T07:57:08.643 に答える