1

私はBackbone、Sammy、SpinなどのJavascriptルーターに取り組んでいます。しかし、私の要件は非常に単純です。ルートのセットとそれに対応するコールバックを提供できるはずであり、リクエストに応じてブラウザのURLを処理できるはずです。

数字のみを処理する場合は:idを、一般的なスラッグを使用する場合は:slugを置き換えるにはどうすればよいですか?

私はこのコードを書きました:

core.route = function(route, options, callback) {
    var url = options.hash;
    var route_segments = route.split('/').length-1;
    var hash_segments = url.split('/').length-1;
    var route_matcher = new RegExp(route.replace(/:[^\/]+/g, '([\\w-]+)'));
    if (url.match(route_matcher)) {
        if (route_segments === hash_segments){
            callback();
        }
    }
};


core.route('/work/:slug/:id/', options, function() {
    alert("work/example/id");
});

core.route('/work/:id/', options, function() {
    alert("work/id/");
});
4

2 に答える 2

0

最初にナメクジがどのように見えるかを定義する必要があります。ただし\d+、正規表現の数字の文字列と一致するため、次のことを試すことができます。

core.route('/work/:slug/(\\d+)/', options, function() {
//...
core.route('/work/(\\d+)/', options, function() {
//...
于 2012-10-05T21:11:46.140 に答える
0

Backboneのルーティングの実装を見てから、本当に必要なものを単純に除外してみませんか?それは可能であるはずであり、使用済みの正規表現もそこにあるかもしれません。

https://github.com/documentcloud/backbone/blob/master/backbone.js#L894

于 2012-10-05T21:30:39.003 に答える