jquery - Backbone.js 不改变 url 的路由

标签 jquery backbone.js pushstate hashbang

我正在将基于 Backbone.js 和 jQuery 的单页 Web 应用程序迁移到 Chrome 扩展。然而,pushState 和基于 hashbang 的路由器模式似乎都不能很好地适应扩展内的环境。我得出的结论是,最好直接渲染用户交互的 View ,完全绕过 window.location 系统。但是,我不太确定如何在不更改数十个文件中对 Router.navigate 的调用的情况下实现这一点。

是否有可插入/模块化的方法来保留 Backbone 路由系统但绕过对 url 的任何更改?

最佳答案

我真的想坚持使用 Router.navigate 来受益于 Backbone.js 提供的路由系统,而不必在 Chrome 扩展程序中使用时处理 hashbang bug(例如,包含斜杠的路由被覆盖),您可以让 Router.navigate 直接加载网址,跳过整个 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) 加载新路线而不更改历史记录,甚至可以使用如下事件将操作绑定(bind)到包含 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') );
  });

});

关于jquery - Backbone.js 不改变 url 的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17334465/

相关文章:

javascript - 从数组执行页面模块

javascript - Backbone 类别选择器仅适用于 1 个类别

javascript - 列表列表列表的 Nice Backbone.js 表示

javascript - Parse (Parse.com) 中的角色分配、管理和权限

javascript - Ember.js - 启用位置历史记录时如何处理 URL 参数?

javascript - 如何在使用 HTML5 pushState 更改浏览器 URL 时处理后退按钮

javascript - jQuery 为每个 div 构建一些行

javascript - 将 Deferred 添加到非异步函数

javascript - Chrome 在 window.history.back() 上强制刷新页面

Javascript 从数组中删除对象的最快方法