Backbone.js为其Backbone.router对象提供navigate(fragment, [options])
方法,该方法执行以下操作(根据文档):
每当您在应用中找到要保存为网址的点时,请致电
navigate
以更新网址。如果您还想调用路由功能,请将trigger
选项设置为true
。要更新网址而不在浏览器的历史记录中创建条目,请将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
选项。这是实施中的错误,还是我误解了什么?
答案 0 :(得分:2)
自6/28/12更新到最新版本的Backbone(https://github.com/documentcloud/backbone上的主版本)可以解决此问题。
答案 1 :(得分:0)
从pushState: true
取消Backbone.history.start
并使用原始navigate
电话进行尝试。
我搜索了解决方案,但我得到的只是关于历史API pushState: true
的模糊评论,导致Backbone路由器的导航功能无法正常工作。关于我的谷歌搜索this文章的一个例子是关于我能找到的问题的最佳资源。