我的应用程序基本上需要一些表单输入并返回一组结果。我有两条路线
routes: {
'': 'search',
'search': 'search',
'results/:query': 'results'
},
results: function(query) {
var search = new ResultsSearchView();
var grid = new GridView({ query: query });
}
如果查询包含任何字符/具体(在这种情况下完全可以发生),它们会被添加到URL中,并且我的路由会中断。
我尝试使用encodeURI()
和encodeURIComponent()
位我没有运气。你们这些人如何处理这些事情?
答案 0 :(得分:4)
您可以在构建网址时使用encodeURIComponent
将/
转换为%2F
,然后在路由处理程序中转换decodeURIComponent
以将其转换回来; HTML会看起来像这样:
<a href="#results/pancakes">no slash</a>
<a href="#results/where%2Fis%2Fpancakes%2Fhouse">with slashes</a>
然后在路由器中:
routes: {
'results/:query': 'results'
},
results: function(query) {
query = decodeURIComponent(query);
// Do useful things here...
}
演示:http://jsfiddle.net/ambiguous/sbpfD/
或者,您可以使用splat route:
路由可以包含参数部分
:param
,它们匹配斜杠之间的单个URL组件;和splat部分*splat
,可以匹配任意数量的URL组件。
所以你的HTML会是这样的:
<a href="#results/pancakes">no slash</a>
<a href="#results/where/is/pancakes/house">with slashes</a>
和你的路由器:
routes: {
'results/*query': 'results'
},
results: function(query) {
// Do useful things here...
}