当我点击浏览器刷新按钮时,我的 Backbone 路由忘记了所有内容

ymdaylpp  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(156)

我有一个较旧的Web应用程序,它是Backbone和.Net 6的混合。当我第一次在Visual Studio 2022中启动该应用程序进行开发时,它加载良好,一切都运行得很好。
我使用 Backbone 路由和一个助手库称为backbone.subroute为我所有的导航。它的工作正常,直到看到下面...
正如我所说的,在我点击浏览器的refresh按钮之前,一切都运行得很好。当我刷新浏览器时,我立即得到(无论我在哪条路线上):
找不到此localhost页面
找不到网址为的网页:游戏管理员/颜色浏览器
HTTP错误404
浏览器控制台或网络选项卡中除了404错误外什么都没有,就好像浏览器完全忘记了路由。
后退按钮也不起作用,* 直到 * 我回到主起始页(https://localhost:33201/studio)。
另外,如果我删除URL行中的路由,这样它就只是一个基本的网站,只有默认的路由,如下所示:https://localhost:33201/studio,则它将正确加载。
我的工艺路线设置如下:
我先把这个叫做:

Backbone.history.start({
    pushState: true
});

然后我的路线:

export default Backbone.Router.extend({
    routes: {
        '': 'defaultRoute',

        'gameWorld': 'gameWorld',
        'gameWorld/*subroute': 'gameWorld',

        'playerStats': 'playerStats',
        'playerStats/*subroute': 'playerStats',

        'gameData': 'gameData',
        'gameData/*subroute': 'gameData',

    },

    initialize: function (args) {
        const { playerSetup } = args;

        this.subrouteOptions = {
            ctx: RouteContext,
            playerSetup,
        }
        this.gameView = (new GameView({ 
            playerSetup,
        })).render();
    },

    defaultRoute: function () {
        Backbone.history.navigate('/studio', { trigger: true });
    },

    gameWorld: function (subroute) {
        import('routes/GameRouter').then(GameRouter => {
            new GameRouter.default('gameWorld', this.subrouteOptions);
        });
    },

    playerStats: function (subroute) {
        import('routes/PlayerRouter').then(PlayerRouter => {
            new PlayerRouter.default('playerStats', this.subrouteOptions);
        });
    },

    gameData: function (subroute) {
        import('routes/GameDataRouter').then(GameDataRouter => {
            new GameDataRouter.default('gameData', this.subrouteOptions);
        });
    }
});

这真的很难调试,因为浏览器除了404之外没有提供任何错误。
而且,我把console.logs放在了任何地方......当我启动应用程序并导航时,我可以看到它们,但一旦我点击刷新,我就什么也看不到了。
但是,只要我回到default路线,也就是/studio,那么一切都神奇地重新开始工作。
所以我不知道为什么刷新按钮这样做。
有人知道这是什么吗?

a8jjtwal

a8jjtwal1#

如果您的应用程序不是从您的域的根url /提供服务的,请确保告诉History根的实际位置,作为一个选项: Backbone 网.历史.开始({推送状态:true,根目录:“/公开/搜索/"})
来源:http://backbonejs.org/#History

相关问题