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

时间:2012-12-06 21:45:07

标签: backbone.js backbone-routing

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

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

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

我尝试使用encodeURI()encodeURIComponent()位我没有运气。你们这些人如何处理这些事情?

1 个答案:

答案 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...
}

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