我真的想坚持使用Router.navigate
以从 Backbone.js 提供的路由系统中受益,而不必在 Chrome 扩展中使用时处理 hashbang 错误(例如,包括斜杠的路由被覆盖),您可以Router.navigate
直接加载 url,跳过整个 pushState 体操。
这实际上很容易实现:
Router = Backbone.Router.extend({
navigate: function (url) {
// Override pushstate and load url directly
Backbone.history.loadUrl(url);
},
// Put routes here
routes: { }
});
然后,您可以Router.navigate(url)
在不更改历史记录的情况下调用以加载新路由,甚至可以将操作绑定到包含data-backbone
属性(例如<a href="login" data-backbone>Login</a>
)的每个链接,并带有如下事件:
$(function(){
// Initialize router
Router = new Router;
Backbone.history.start();
// Bind a[data-backbone] to router
$(document).on('click', 'a[data-backbone]', function(e){
e.preventDefault();
Router.navigate( $(this).attr('href') );
});
});