5

私のアプリは基本的にフォーム入力を受け取り、一連の結果を返します。私は2つのルートを持っています

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

encodeURIComponentURL を作成するときに使用して に変換/%2FdecodeURIComponentルート ハンドラ内で元に戻すことができます。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 ルートを使用することもできます:

:paramルートには、スラッシュ間の単一の URL コンポーネントに一致するパラメータ パーツを含めることができます。およびスプラット パーツ*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 に答える