0

バックボーン ルートのハッシュマップの一部として、ディレクトリの場所とファイル パスを渡そうとしています。これはハッシュマップ付きの URL です。

localhost/index.html#directory-http://localhost/foobar-html/foo.html

そして、これは上記のURLをマップする私のルートです:

routes: {
    'directory-*directoryPath-*filePath': 'render'
},

render: function (directoryPath, filePath) {
    // I get the entire url in directoryPath variable
    // http://localhost/foobar-html/foo.html
    // and filePath is empty.
}

このようなタイプのハッシュ URL をマップする正しい方法は何でしょうか? ありがとう!

4

1 に答える 1

1

細かいマニュアルから:

:paramルートには、スラッシュ間の 1 つの URL コンポーネントに一致するパラメータ パーツを含めることができます。およびスプラット パーツ*splat。これは、任意の数の URL コンポーネントに一致できます。

あなたの問題は、スプラットがすべてを食い尽くすため、1 つのルートに 2 つのスプラットを配置しても意味がないことです。パラメーター部分 は使用できません:x。これはスラッシュで終わるためです。

できることがいくつかあります。

  1. リンク内のスラッシュを URI エンコードし、パラメーター パーツを使用できます。URL は次のようになります。

    #directory-http:%2f%2flocalhost%2ffoobar-html%2ffoo.html
    

    ルーターは次のようになります。

    routes: {
        'directory-:directoryPath-:filePath': 'render'
    },
    render: function(d, f) {
        d = decodeURIComponent(d);
        f = decodeURIComponent(f);
        //...
    }
    

    デモ: http://jsfiddle.net/ambiguous/xBnaN/

  2. を使用してルートを正規表現として追加できますroute。これにより、パターンの構築方法がより自由になります。たとえば、次のようなフラグメントです。

    #directory-http://localhost/foobar-html/foo.html
    

    次のようなルーターで処理できます。

    initialize: function() {
        this.route(/directory-(.*?)-(.*)/, 'render');
    },
    render: function(d, f) {
        //...
    }
    

    デモ: http://jsfiddle.net/ambiguous/r8MBb/

2 番目のオプションでは、必然的にorの-中に問題が発生します。ただし、埋め込みs をURI エンコードして、最初のオプションを通過させることができます。directoryPathfilePath-

于 2012-07-02T18:47:13.967 に答える