尽管文档暗示相反,但Backbone路线中缺少前导斜线仍无法实现

时间:2012-02-20 19:55:04

标签: javascript ajax backbone.js

问:

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

背景:

Backbone文档明确建议以下内容:

  

请注意,您要避免在路线定义中使用前导斜杠 ...

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

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则没有。 (将前导/添加到索引路由会修复此问题。)

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

2 个答案:

答案 0 :(得分:3)

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

例如:

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

提供的散列网址为http://example.com/#/clients/,但推送状态网址为http://example.com//clients/,显然会失败。

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

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

分别提供http://example.com/#!/clients/http://example.com/!/clients/

另请注意,前导斜杠不适用于router.navigate。系统会自动删除router.navigate('/clients/'),从而生成#clients/的网址,而不是#/clients/

答案 1 :(得分:1)

传入的“href”值匹配到路径属性名称。如果您的“href”值以斜杠开头,那么您的路径属性也必须如此。

请注意,在Backbone文档中的所有示例中,片段值不以斜杠开头。