0

嗨,我想让我的根 url 有一个如下所示的 :id 段,它应该作为参数传递给与之匹配的每个路由

Backbone.history.start({ pushState: false, root: "/orders/:id/items"})

routes: {
    "": "item"
},

item: function(id) {
  alert(id);
}

但现在我得到的 id 是未定义的,即使它是根 url 的一部分。

请帮我

4

1 回答 1

1

好吧,您的根 url 中不能有参数段Backbone.History

来自Backbone.History.getFragment的一些源代码,用于获取 url-fragment 以匹配路由并从中提取变量(我的布局有点不同)

if (!fragment.indexOf(this.options.root)) { 
  fragment = fragment.substr(this.options.root.length);
}

这段代码是每个Router.navigate调用结束的地方(除非{ trigger: false }应用)。那么如果片段包含使用start-function 定义的根 url,会发生什么情况,片段将被替换为原始片段的子字符串,该子字符串方便地省略了根。因此,当从片段中提取变量时,甚至不会考虑您的根 url。

所以没有办法将变量放入根 URL,因为根据定义,根 url 只是 Backbone.History 的指针,以防您的应用程序不是从您的域的根 url 提供的。这是报价

如果您的应用程序不是从您的域的根 url / 提供服务,请务必告诉历史根的真正位置...

因此,如果您的应用程序没有被提供/orders/12345/items/orders/78342/items那么我建议您不要试图告诉您的路由器它是。相反,从提供它/,然后正常设置路由:

routes: {
  'orders/:id/items': 'item'
}

希望这可以解决问题!

于 2012-08-06T13:27:38.283 回答