Marionette JS 路由器有问题

Having trouble with Marionette JS router

我的路由器和控制器有问题。在我的应用 before:start 上,我有一个处理程序可以获取 Leads 和 Vehicles 的集合。

我只有一个区域,布局视图为:

var App = new Marionette.Application({});

var AppLayoutView = Marionette.LayoutView.extend({
  el: 'body',
  regions: {
    main: '#app-container'
  }
});

我的控制器是:

var Controller = Marionette.Object.extend({
    leads: function() {
      App.regions.main.show(new App.leadsTableView({collection: App.leads}));
    },
    vehicles: function() {
      App.regions.main.show(new App.vehiclesTableView({collection: App.vehicles}));
    }
});

在我的启动处理程序中:

App.on('start', function() {
  App.regions = new AppLayoutView();
  App.router = new Marionette.AppRouter({
    controller: new Controller(),
    appRoutes: {
      'leads': 'leads',
      'vehicles': 'vehicles'
    }
  });

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

App.start();

如何从特定路线开始?而且,当用户转到#vehicles 时,如何让该区域加载新视图?我缺少有关路由器的信息。

编辑:当我去时,#leads 在我的 URL 中,我的车辆视图出现了。当我点击指向#leads 和#vehicles 的链接时,它们不起作用。

默认路线

您可以通过在路线末尾添加 "splat" 路线(以 * 开头的路线)来定义默认值。我喜欢使用 *default 使意图显而易见:

appRoutes: {
  'leads': 'leads',
  'vehicles': 'vehicles',
  '*default': 'leads'
}

破碎link

因为您正在使用 pushstate 路由,所以视图 URL 是 /vehicles 而不是散列片段 #vehicles。您不应再使用哈希片段网址。

这是一种触发 pushState 路由的简单方法,点击次数 link:

$('a[href]').on('click', function(e) {
  e.preventDefault();
  var href = e.target.getAttribute('href');
  App.router.navigate(href, { trigger: true })
});

您可能会发现此 post about moving from hash fragment to pushState routing 有用。

您还需要配置您的服务器以将与您的路由匹配的请求传递到主应用程序页面 - 例如,它需要理解 http://localhost/app/vehicle 应该由 http://localhost/app 处理。