2

このすべての「直感的な」派生物のように見えるURLに一致するバックボーンルートを設定したい

基本フォーマット:http://www.domain.com/PageName/:argument
例:http://www.domain.com/PageName/1234567890

私の意見では、「直感的な」派生物はこれらすべてのURLになります。

ベースURL:http://www.domain.com/PageName/1234567890
テーリングスラッシュ付き:http://www.domain.com/PageName/1234567890/
クエリパラメータを含むベースURL:http://www.domain.com/PageName/1234567890?x=1
末尾のスラッシュとクエリパラメータ:http://www.domain.com/PageName/1234567890/?x = 1

問題は、バックボーンルートが非常に醜くなっていることです。

ルート:{    
    "PageName /:argument": "main"、
    "PageName /:argument /": "main"、
    "PageName /:argument / ?: params": "main"、
    "PageName /:argument?:params": "main"
}

このルートは4行ではなく1行で表現できるはずだと思います。また、引数としてurlパラメータを送信する必要はありません。それを行わないと、URLパラメータを機能させることができませんでした。

このルートをより適切に指定するにはどうすればよいですか?

また、私はこの問題に間違って取り組んでいますか?そもそもこの問題を抱えていたのは、もっと根本的な問題の誤解と関係があるのではないかと思います。

ありがとう!

4

1 に答える 1

3

.route()正規表現を使用してみましたか?オプションのルート要素が必要な場合は、おそらく正規表現が適しています。.initialize()これは、ハッシュの代わりにルートを定義することを意味しますroutesが、問題を解決し、コードが少なくて済みます。

私はこれをテストしていませんが、次のようになると思います。

initialize: function(options) {
    this.route(/PageName\/([^\/\?]+)\/?\??(.*)/, "main");
}

(正規表現をテストすると、ここで 1 つの小さな問題が明らかになります: ではなく、params 引数に空の文字列がundefined返されます。しかし、それはおそらく問題ではありません。)

于 2012-09-05T17:23:26.870 に答える