嗨,我想让我的根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'
}
希望这能澄清一切!