在Backbone.js中用param-like:id指定根url并能够访问它



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

Backbone.history.start({ pushState: false, root: "/orders/:id/items"})
routes: {
    "": "item"
},
item: function(id) {
  alert(id);
}

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

请帮助我

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

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

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

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

因此,没有办法将变量输入根URL,因为根据定义,根URL只是Backbone的指针。如果您的应用程序不是从域的根URL提供的,则历史记录。这是报价:

如果你的应用程序不是从你的域的根url/服务的,一定要告诉历史根真正在哪里…

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

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

希望这能澄清一切!

最新更新