【问题标题】:How to get actual value of URL in Crossroads如何在 Crossroads 中获取 URL 的实际值
【发布时间】:2014-09-12 09:05:35
【问题描述】:
可以说,我已经定义了一个类似的路线:
route:{
pattern: '/root/finder/*',
handler: finderHandler
}
如果用户使用 url /root/finder/1234 发出请求,那么这匹配上述模式,请求将由 finderHandler() 处理
现在,在我的finderHandler 中,我想获取原始 url 值。在这种情况下,它是/admin/finder/1234,我怎样才能得到它?
【问题讨论】:
标签:
javascript
crossroadsjs
【解决方案1】:
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 );
}