Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当传递到路由的查询包含时,backbone.js路由/_Backbone.js_Backbone Routing - Fatal编程技术网

当传递到路由的查询包含时,backbone.js路由/

当传递到路由的查询包含时,backbone.js路由/,backbone.js,backbone-routing,Backbone.js,Backbone Routing,我的应用程序基本上接受一些表单输入并返回一组结果。我有两条路线 routes: { '': 'search', 'search': 'search', 'results/:query': 'results' }, results: function(query) { var search = new ResultsSearchView(); var grid = new GridView({ quer

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

routes: {
        '': 'search',
        'search': 'search',
        'results/:query': 'results'
    },
    results: function(query) {
        var search = new ResultsSearchView();
        var grid = new GridView({ query: query });
    }
如果查询包含任何字符/特别是(在这种情况下完全可能发生),它们将被添加到URL,并且我的路由中断

我试过使用
encodeURI()
encodeURIComponent()
位,但运气不好。您是如何处理这些事情的?

您可以在构建URL时使用,将
/
转换为
%2F
,然后在路由处理程序内部将它们转换回来;HTML将以如下方式结束:

<a href="#results/pancakes">no slash</a>
<a href="#results/where%2Fis%2Fpancakes%2Fhouse">with slashes</a>
<a href="#results/pancakes">no slash</a>
<a href="#results/where/is/pancakes/house">with slashes</a>
演示:

或者,您可以使用:

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

因此,您的HTML如下所示:

<a href="#results/pancakes">no slash</a>
<a href="#results/where%2Fis%2Fpancakes%2Fhouse">with slashes</a>
<a href="#results/pancakes">no slash</a>
<a href="#results/where/is/pancakes/house">with slashes</a>

演示:

使用splat路线,效果很好。谢谢你的帮助。