Ember.js 2.嵌套路由但非嵌套模板

时间:2017-06-25 14:26:28

标签: javascript ember.js ember-data ember-cli ember-2.0.0

首先,感谢大家在本论坛上的努力。

我遇到这种情况:

  • mysite.com/authors(作者列表)
  • mysite.com/author/1(作者1)
  • mysite.com/book/1(作者1的第1册)
  • mysite.com/cart/1(作者1第1册的购物车页面)

我需要一个这样的网址:

mysite.com/author/1/1/cart

但我不想要嵌套模板(每个页面都不同,我不想在很多页面中使用相同的信息)。

有没有办法获得该网址?

我的实际 router.js 是:

Router.map(function() {
  this.route('index', {path: '/'});
  this.route('login');
  this.route('authors', {path: '/authors'});
  this.route('author', {path: '/author/:author_id'});
  this.route('book', {path: '/book/:book_id'});
  this.route('cart', {path: '/cart/:cart_id'});
});

1 个答案:

答案 0 :(得分:0)

您有两种选择:

多个动态细分

不要嵌套你的路线但是有多个动态段。多数民众赞成可能:

this.route('cart', {path: '/cart/:author_id/:cart_id'});

这将为您提供这样的路线:

<强> /cart/1/A 这将呈现作者1和购物车A

cart路线

Nest但不要将任何内容放入父路径

所以你可以拥有这个路由器:

this.route('author', {path: '/author/:author_id'}, function() {
  this.route('cart', {path: '/cart/:cart_id'});
});

现在您的问题是,如果您将作者数据放入/author路线,它也会在author.cart路线上显示。但一个简单的解决方案是将author路线设为空,只需{{outlet}}作为模板,并将作者的内容放入author.index路线。

这将为您提供如下路线:

<强> /author/1 这将呈现作者1的author.index路线

<强> /author/1/cart/A 这将呈现作者1和购物车A

author.cart路线