2

ノックアウト js アプリで実行されている sammy.js があります。現在、末尾のスラッシュが欠落しているルートをリダイレクトしようとしています (たとえば、/#/stop/1/100032) 末尾のスラッシュが欠落しているすべてのページを、末尾のスラッシュのあるページにリダイレクトしたいと考えています。

事態を複雑にするために、そのようなルートがない場合に備えて、エラー ページも作成したいと考えています。

function RoutesViewModel () {
    var self = this;

    self.router = Sammy(function () {
        this.get('/#/stop/:agency_id/:stop_id/', function () {
            app.page.state('bus');
            app.stop.setCurrentById(this.params['agency_id'], this.params['stop_id']);
            mixpanel.track('stop page load', {
                'route': '/#/stop/' + this.params['agency_id'] + '/' + this.params['stop_id'] + '/',
            });
        });
        this.get('/(.*[^\/])', function () {
            this.redirect('/',this.params['splat'],'/');
        });
    });

    self.router.error = function (message, error) {
        app.page.header("Unable to find your page");
        app.page.message("The page you've requested could not be found.<br /><a href=\"/\">Click here</a> to return to the main page.");
    }

    self.run = function () {
        self.router.run();
    }
}

上記は、私がこれまでに行ったルートの選択です。残念ながら、上記の例の URL に移動すると、ページは正しいのではなく、エラーをロードします/#/stop/1/100032/

どんな助けでも大歓迎です。

4

2 に答える 2

1

私はこれと同じ問題を抱えていたので、サミーのセットアップの最後にキャッチオールで修正することにしました. 私の解決策では、末尾のスラッシュがある場合は削除しますが、代わりにスラッシュを追加して、逆の操作を簡単に実行できます。

Sammy(function () {
    this.get('#', function () {
        // ...
    });
    this.notFound = function (method, path) {
        if (path[path.length - 1] === '/') {
            // remove trailing slash
            window.location = path.substring(0, path.length - 1);
        } else {
            // redirect to not found
        }
    }
});
于 2015-08-24T20:20:04.600 に答える