如何在Crossroads中获取URL的实际值

时间:2014-07-21 18:32:23

标签: javascript crossroadsjs

让我们说,我已经定义了一条路线:

route:{
  pattern: '/root/finder/*',
  handler: finderHandler
}

如果用户使用网址/root/finder/1234发出请求,则此匹配上述模式,请求将由finderHandler()处理 现在,在我的finderHandler中,我想获取原始网址值。在这种情况下,它是/admin/finder/1234,我怎么能得到它?

1 个答案:

答案 0 :(得分:0)

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 );
}