5

我的应用程序基本上接受一些表单输入并返回一组结果。我有两条路线

routes: {
        '': 'search',
        'search': 'search',
        'results/:query': 'results'
    },
    results: function(query) {
        var search = new ResultsSearchView();
        var grid = new GridView({ query: query });
    }

如果查询包含任何字符 / 特别(在这种情况下可能完全发生),它们将被添加到 URL 并且我的路由中断。

我已经尝试过使用encodeURI()并且encodeURIComponent()有点我没有任何运气。你们这些人是怎么处理这些事情的?

4

1 回答 1

4

您可以encodeURIComponent在构建 URL 时使用将其转换/%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 parts *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...
}

演示:http: //jsfiddle.net/ambiguous/awJxG/

于 2012-12-06T22:50:14.950 回答