4

Backbone.js は、navigate(fragment, [options])その Backbone.router オブジェクトのメソッドを提供します。これは、次のことを行います (ドキュメントに従って)。

アプリケーションで URL として保存したいポイントに到達したら、URLnavigateを更新するために を呼び出します。route 関数も呼び出したい場合は、triggerオプションをに設定しますtrue。ブラウザの履歴にエントリを作成せずに URL を更新するには、replaceオプションをに設定しますtrue

したがって、単純に呼び出すと、対応するルートをトリガーせずappRouter.navigate('page');に URL が変更される可能性があります。ただし、デフォルトwww.myapp.com/pageではルーターが URL にリダイレクトされ、ページ ルートもトリガーされることがわかりました。trigger=false

したがって、次のコード:

$(function(){
var AppRouter = Backbone.Router.extend({

    routes: {
        '': 'home',
        'page': 'page',
    },

    home: function() {
        window.app.navigate('page', {replace: true});        
        console.log('home route');    
    },

    page: function () {
        console.log('page route');
    },

});

window.app = new AppRouter();
Backbone.history.start({pushState: true});
});

www.myapp.com に移動すると、次のコンソール出力が生成されます。

> home route
> page route

予想されるコンソール出力が次のようになる場合:

> home route

この方法は、デフォルトのtriggerオプションに従わないようです。これは実装のバグですか、それとも何か誤解していますか?

4

2 に答える 2

2

2012 年 6 月 28 日の Backbone の最新バージョン ( https://github.com/documentcloud/backboneのマスター バージョン) に更新すると、問題が解決します。

于 2012-06-29T05:13:12.790 に答える
0

を外してpushState: trueオリジナルコールBackbone.history.startでお試しください。navigate

これに対する解決策をグーグルで検索しましたが、履歴 API がpushState: true原因でバックボーン ルーターのナビゲート機能が正しく機能しないというあいまいな発言しか得られませんでした。私のグーグルの例として、この削除された記事は、私が見つけた問題に関する最高のリソースに関するものでした.

于 2012-06-26T11:35:15.343 に答える