我正在将基于 Backbone.js 和 jQuery 的单页 Web 应用程序迁移到 Chrome 扩展。然而,无论是pushState
基于 hashbang 的路由器模式似乎也不能很好地适应扩展内的环境。我得出的结论是,我最好直接渲染用户交互的视图,绕过window.location
系统完全。但是,我不太确定如何在不更改调用的情况下实现这一点Router.navigate
在数十个文件中。
是否有可插入/模块化的方法来保留 Backbone 路由系统但绕过对 url 的任何更改?
我真的想坚持使用Router.navigate
为了受益于 Backbone.js 提供的路由系统,而不必在 Chrome 扩展中使用时处理 hashbang bug(例如,包含斜杠的路由被覆盖),您可以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') );
});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)