可以说,我已经定义了一条路线,例如:
route:{
pattern: '/root/finder/*',
handler: finderHandler
}
如果用户使用 url 发出请求/root/finder/1234
,那么这与上述模式匹配,并且请求将由finderHandler()
Now 处理,在 my 中finderHandler
,我想获取原始 url 值。在这种情况下,它是/admin/finder/1234
,我怎样才能得到它?
可以说,我已经定义了一条路线,例如:
route:{
pattern: '/root/finder/*',
handler: finderHandler
}
如果用户使用 url 发出请求/root/finder/1234
,那么这与上述模式匹配,并且请求将由finderHandler()
Now 处理,在 my 中finderHandler
,我想获取原始 url 值。在这种情况下,它是/admin/finder/1234
,我怎样才能得到它?
CrossroadsJS 实际上并不关心 URL(在 window.location 的意义上)并且不提供对它的访问。该crossroads.parse()
方法接受任意字符串并与之匹配。该字符串可能来自任何来源、URL 或其他。
您可以使用该route.interpolate()
函数对字符串进行逆向工程。该函数采用命名值的散列并将它们映射到路由匹配模式中定义的参数。路由的处理函数会传递任何匹配的参数,因此将它们传递给散列,您应该得到原始字符串。
您的示例匹配许多路线,但没有捕获最后一部分。像这样重写它应该会导致 Crossroads 捕获最后一段:
var myRoute = crossroads.addRoute( '/root/finder/:optional:', finderHandler );
您应该能够使用如下处理程序恢复字符串:
function finderHandler ( optionalSegment ) {
var urlFragment = myRoute.interpolate({optional: optionalSegment});
console.log( urlFragment );
}