Marionette 路由器的非索引根路径

Non index root path with Marionette router

我必须在“/b”路由上提供我的 backbone 应用程序,但无法连接到我的路由器。如果我只是 showView 一个视图,它工作正常,但是当我连接到我的路由器时,我的路由控制器功能没有触发,有什么想法吗?

路由器:

define('appRouter', ['marionette', 'rootView', 'changePasswordView'], function(Marionette, rootView, changePasswordView) {
  return Marionette.AppRouter.extend({
    routes: {
      '/b/change-password': 'showChangePassword',
      '/b': 'showAccountSettings'
    },
    showChangePassword: function() {
      this.showView(new changePasswordView());
    },
    showAccountSettings: function() {
      this.showView(new rootView());
    }
  });
});

应用程序 onStart(已确认触发):

 var Application = Marionette.Application.extend({

...

    onStart: function(options) {
      console.log('on start');
      var router = new appRouter(options);
      /** Starts the URL handling framework */
      if( ! Backbone.History.started) Backbone.history.start();
      router.initialize();
    }, 

...

});

当我访问 http://localhost:8080/b(出于所有密集目的我的索引)时,它呈现一个空白页面。

Backbone 中的默认路由是 hash-based。 Link 到您的 /b 路线应该类似于 http://localhost:8080/#/b.

如果您不需要 基于哈希的 链接,请从 pushState: true.

开始历史记录
Backbone.history.start({pushState: true});

编辑:

如果您在 /b 路径上提供应用程序,那么您定义的路由有误。路由必须相对于 /b:

定义
routes: {
  'change-password': 'showChangePassword',
  '': 'showAccountSettings'
},

并访问:

  • http://localhost:8080/b' -showAccountSettings`
  • http://localhost:8080/b#change-password' -showChangePassword`