Ember路由器具有可选的动态段和未知顺序

时间:2013-09-30 22:46:14

标签: ember.js

是否可以设置具有动态段的路由器,其中订单是未知的?

我正在开发一个SPA,其中两个主要组件是搜索窗格和内容窗格。在内容窗格中,您可以导航链接,并在内容窗格中加载新内容。

您还可以在搜索窗格中搜索并显示结果列表。单击搜索结果将更新内容窗格。除了这些要求之外,用户还需要能够单击命名锚点链接并滚动到内容中的特定位置。

原始路由器如下所示:

App.Router.map(function() {
    this.route('index', {path: '/'});
    this.resource('page', {path: 'page/:page_id'}, function() {
        this.resource('anchor', {path: 'anchor/:anchor_id'});
        this.resource('search', {path: 'search/:search_id'});
    });
});

此路由器的问题是我可以 / page / foo / page / foo / anchor / 001 / page / foo / search /条款,但我不能 / page / foo / search / terms / anchor / 001 。随着应用的增长,需要添加更多路线。 页面路线将始终存在,但其他任何路线都是可选的。

我希望有一种方法可以在我的路由器中增加更多的灵活性,而我却没有看到。

1 个答案:

答案 0 :(得分:1)

如果你愿意牺牲少量的干燥,这就有效:

App.Router.map(function() {
  this.route('index', {path: '/'});
  this.resource('page', {path: 'page/:page_id'}, function() {
    this.resource('anchor', {path: 'anchor/:anchor_id'});
    this.resource('search', {path: 'search/:search_id'}, function(){
      this.resource('anchor', {path: 'anchor/:anchor_id'});
    });
  });
});

(注意你必须使用资源,如果你使用路由,父资源的命名空间被添加到生成的v / c对象名称)