使用Marionette路由器的非索引根路径

时间:2016-08-31 00:25:00

标签: backbone.js url-routing marionette

我必须在" / b"上提供我的骨干应用程序。路线和我的路由器挂钩有困难。如果我只是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时(我的索引用于所有密集目的),它会呈现一个空白页。

1 个答案:

答案 0 :(得分:1)

Backbone中的默认路由为hash-based。指向您的/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`