0

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

define(function(require) {
var _         = require('underscore'),
    Backbone  = require('backbone'),

    homeStageView,
    homeSidebarView,
    yxyStageView;



return Backbone.Router.extend({
    routes: {
        '/web/:route'     : 'viewLoader'
    },

    initialize: function() {
        //this._bindRoutes();
        $('.link').click(function(e) {
            e.preventDefault();
            Backbone.history.navigate($(this).attr('href'), true);
        });
    },

    viewLoader: function(route) {
        switch(route) {
            case 'home': 
                this.homeHandler();
                break;
            case 'yxy':
                this.yxyHandler();
                break;
        }
    },

    // navigation handlers
    homeHandler: function() {
        if ( !homeStageView ) {
            require(['views/home-stage-view'], function(HomeStageView) {
                homeStageView = new HomeStageView();
                homeStageView.render();
            });    
        }
        else {
            homeStageView.render();
        }
        this.renderHomeSidebarView();
    },

    yxyHandler: function() {
        if ( !yxyStageView ) {
            require(['views/yxy-stage-view'], function(YxyStageView) {
                yxyStageView = new YxyStageView();
                yxyStageView.render();
            });    
        }
        else {
            yxyStageView.render();
        }
        this.renderHomeSidebarView();
    },

});

});

私のメインビューでは、次のようにルーターを初期化します。

appRouter = new AppRouter();    
if ( history && history.pushState ) {
    Backbone.history.start({pushState: true});
    console.log('has pushState');
}
else {
    Backbone.history.start();
    console.log('no pushState');
}

これは、すべてのビューを読み込むには問題なく機能しますが、ユーザーが戻るボタンをクリックすると機能しません。

アドレスバーの URL はそれに応じて変わりますが、それだけです。明らかに、私は何かが欠けています。

誰か助けてくれませんか?

4

1 に答える 1

4

細かいマニュアルから:

拡張する Backbone.Router.extend(properties, [classProperties])

[...] ルート定義で先頭のスラッシュを使用しないようにする必要があることに注意してください。

ルートは/web/:route次のとおりです。先頭のスラッシュを削除してみてください。

routes: {
    'web/:route': 'viewLoader'
}
于 2012-09-15T02:05:45.803 に答える