履带传递给路由时的backbone.js路由包含/

Cha*_*les 5 backbone.js backbone-routing

我的应用程序基本上采取一些形式输入并返回一组结果.我有两条路线

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

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

我尝试过使用encodeURI(),encodeURIComponent()我没有运气.你们这些人怎么处理这些事情?

mu *_*ort 4

您可以encodeURIComponent在构建 URL 时使用将其转换/%2F,然后decodeURIComponent在路由处理程序中将它们转换回来;HTML 最终看起来像这样:

<a href="#results/pancakes">no slash</a>
<a href="#results/where%2Fis%2Fpancakes%2Fhouse">with slashes</a>
Run Code Online (Sandbox Code Playgroud)

然后在路由器中:

routes: {
    'results/:query': 'results'
},
results: function(query) {
    query = decodeURIComponent(query);
    // Do useful things here...
}
Run Code Online (Sandbox Code Playgroud)

演示: http: //jsfiddle.net/ambiguously/sbpfD/

或者,您可以使用splat 路线

路由可以包含参数部分 ,:param它匹配斜杠之间的单个 URL 组件;和 splat parts *splat,它可以匹配任意数量的 URL 组件。

所以你的 HTML 应该是这样的:

<a href="#results/pancakes">no slash</a>
<a href="#results/where/is/pancakes/house">with slashes</a>
Run Code Online (Sandbox Code Playgroud)

和你的路由器:

routes: {
    'results/*query': 'results'
},
results: function(query) {
    // Do useful things here...
}
Run Code Online (Sandbox Code Playgroud)

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