Backbone.js は、navigate(fragment, [options])
その Backbone.router オブジェクトのメソッドを提供します。これは、次のことを行います (ドキュメントに従って)。
アプリケーションで URL として保存したいポイントに到達したら、URL
navigate
を更新するために を呼び出します。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
オプションに従わないようです。これは実装のバグですか、それとも何か誤解していますか?