Backbone.js 为其 Backbone.router 对象提供了一个navigate(fragment, [options])
方法,该方法执行以下操作(根据文档):
每当您在应用程序中到达要保存为 URL 的点时,调用
navigate
以更新 URL。如果您还想调用路由函数,请将trigger
选项设置为true
。要更新 URL 而不在浏览器的历史记录中创建条目,请将replace
选项设置为true
。
因此,简单的调用appRouter.navigate('page');
可能会在www.myapp.com/page
不触发相应路由的情况下将 URL 更改为。但是,我发现我的路由器重定向到 URL并触发了 page route,尽管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
选项。这是实现中的错误,还是我误解了什么?