0

ルートを処理するこれら 2 つの方法の違いは何ですか?

var Router = Backbone.Router.extend({
    routes: {'home': 'showHome}, 
    showHome: function() {//do whatever} 
});

var Router = Backbone.Router.extend({
    routes: {'home': 'showHome}, 
    initialize: function() { 
        var router = new Router(); 
        router.on('route:showHome', function(){//do something});
    }
});

現在、私はそれを2番目の方法で持っています。それはうまく機能し、私は正しい場所に着きます..

私のルーターは適切にセットアップされましたが(私は思う)、私のルートはまだ奇妙な動作をしています(次のように)。

私が抱えている唯一の問題は、ルートを変更しようとすると、正しいページに到達する前にアドレスバーが複数の異なるルート間でちらつくことです (常に正しい場所に到達します)。

window.location = '#/route';ビュー内のjQueryリスナー内で使用するページを変更しています。

$('#right_arrow').live('click', {view: that}, this.rightArrow);
...
rightArrow: function(e){
    var that = e.data.view;
    if(typeof window.easyUserData.fbResponse.authResponse === 'undefined') {
        // Not logged in
        window.location = '#/login';
    } else {
        // Logged in
        window.location = '#/notes/right';
    }
    return false;
}

私はデバッグしようとしていて、ブレークポイントをに設定したときに見つけたものwindow.location = '#/notes/right';:

  1. URL は適切に変更されます ('#/notes/right')
  2. return false 実行
  3. 右矢印関数が終了し、デバッガーが jquery コードに入ります
  4. デバッガーで 5 ~ 6 回の「ステップ オーバー」を行った後 (まだ jquery コード内)、URL が「#/news/right」に変わります。
  5. さらに数回「ステップオーバー」した後、元のブレークポイントに戻り、URL が正しい「#/notes/right」に変更されます
  6. 新しいビューがロードされます

なぜこのように振る舞うのですか?ルーターの設定方法に関連していますか?

4

1 に答える 1

1

コードは、initialize 関数で新しい Router をインスタンス化しています。これは、その特定のオブジェクトが最初にインスタンス化されたときに呼び出されるものです。したがって、本質的に、不要なルーターを作成しています。

最初の例のコードは正しいです。次に、次のようにします。

var myRouter = new Router();
于 2013-01-08T00:41:46.263 に答える