Backbone.js 不改变 url 的路由

2024-02-24

我正在将基于 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(使用前将#替换为@)

Backbone.js 不改变 url 的路由 的相关文章