嗨,我想让我的根 url 有一个如下所示的 :id 段,它应该作为参数传递给与之匹配的每个路由
Backbone.history.start({ pushState: false, root: "/orders/:id/items"})
routes: {
"": "item"
},
item: function(id) {
alert(id);
}
但现在我得到的 id 是未定义的,即使它是根 url 的一部分。
请帮我
嗨,我想让我的根 url 有一个如下所示的 :id 段,它应该作为参数传递给与之匹配的每个路由
Backbone.history.start({ pushState: false, root: "/orders/:id/items"})
routes: {
"": "item"
},
item: function(id) {
alert(id);
}
但现在我得到的 id 是未定义的,即使它是根 url 的一部分。
请帮我
好吧,您的根 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'
}
希望这可以解决问题!