javascript - 尽管文档建议相反,但主干路由中缺少前导斜杠仍无法交付

标签 javascript ajax backbone.js

问:

我应该将我的 href 属性更改为相对属性还是应该使用前导斜线定义路由?
(为什么 Backbone 文档建议不要使用前导斜线?)

背景:

Backbone 文档清楚地建议以下内容:

Note that you'll want to avoid using a leading slash in your route definitions…

现在,我为测试定义了这些路由:

var Router = Backbone.Router.extend({
  routes: {
    "index/": "logMe",
    "/clients/": "logMe"
  },

  logMe: function (page) {
    console.log(page);
  }
});

调用 router.navigate($(this).attr('href'), {trigger: true});click 上,路由被捕获为/clients/ 但不适用于 index。 (将前导 / 添加到 index 路由可以修复此问题)。

我传递的 href="…" 字符串都是从域根开始的 (href="/index/" & href="/clients/").

最佳答案

主干文档建议避免使用前导斜杠,因为如果您使用 pushState: true,它们会中断。

例如:

routes: {
    "/clients/": "logMe"
}

给出 http://example.com/#/clients/ 的哈希 URL,但是 http://example.com//clients/ 的 pushState URL >,这显然会失败。

使用类似 !/ 的前缀将起作用:

routes: {
    "!/clients/": "logMe"
}

这将分别给出 http://example.com/#!/clients/http://example.com/!/clients/

另请注意,前导斜线不适用于 router.navigaterouter.navigate('/clients/') 被自动剥离,导致 URL 为 #clients/,而不是 #/clients/

关于javascript - 尽管文档建议相反,但主干路由中缺少前导斜杠仍无法交付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367559/

相关文章:

javascript - jQuery 单击多个 Action

javascript - Backbone.js - 根据包含多个关键字的数组过滤集合

javascript - 在 JavaScript 中,如何使用函数参数作为对象的键?

javascript - 如何在我的网站中加载组件及其类

jquery - ajax链式调用完成

javascript - 如何获取ajax表单提交返回值

ajax - 通过 Django All-auth 上的 AJAX post 请求登录

backbone.js - Backbone 样板 : "this.model is undefined"

javascript - 淡出、淡入 : Variable references lost

javascript - backbone.js 模型指向嵌套模型的相同实例