4

pushState:trueサイトの URL を処理するためにBackbone のルーターを使用しています。URL の例は次のとおりです。

問題: ユーザーがhttp://domain.com/John/にアクセスすると、予期された機能photosが実行されます。ただし、ユーザーが末尾のスラッシュなしでhttp://domain.com/Johnにアクセスすると、何も起こりません。私の推測では、 で定義された末尾のバックスラッシュrootがこれを防いだのです。

ルーター

var AppRouter = Backbone.Router.extend({

    routes: {
        '': 'photos',
        'photos': 'photos'
    },

    viewing_username: $('#viewing_username').val(),  // eg: 'John'

    photos: function() {
        console.log('photos');
    }
});

var app = new AppRouter();
Backbone.history.start({
    pushState: true,
    root: '/' + app.viewing_username + '/'
});

jQuery

$('a[data-toggle="tab"]').on('click', function(e) {
    app.navigate(e.target.getAttribute('href'), true);
});

2回目の試行

問題::今回は末尾のバックスラッシュを削除しroothttp ://domain.com/John がルートをトリガーするようになりました。今回の問題は、ユーザーがhttp://domain.com/John (ブラウザでは という名前のページとして扱われると思われますJohn) にいるときに発生するため、リンク (属性 を持つdata-toggle="tab") をクリックすると、URL が次のように変更されます。http://domain.com/Johnphotos区切りなし/

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

バックボーンを最新バージョンに更新すれば、2回目の試行でうまくいくと思います。このディスカッションを参照してください。

https://github.com/documentcloud/backbone/pull/1505

上記の変更は8日前にマージされました。

于 2012-08-04T03:25:56.570 に答える
0

@shioyamaの答えは正しいですが、可能な場合はワイルドカードルートを使用してこの奇妙さを回避することがよくあります。

例えば:

routes:
  'dashboard(/*subroute)': 'index'

もちろん、これは多くのアプリで可能なことではありませんが、以前は時間を節約できました。

于 2013-03-19T21:34:41.723 に答える