Ember嵌套全局路线(通配符)

时间:2016-04-12 15:49:43

标签: ember.js routes nested wildcard glob

我正试图在我的路线上做这样的事情:

this.route('products', { path: "/products/*choises"}, function() {
   this.route('promotion', {path: "/promotion/*offers"});
}); 

产品路线:

    offerPath: function(params){
      this.transitionTo('product.promotion', params);
    }

问题在于我访问的促销并不重要,应用认为是产品路线的一部分。 我怎样才能做到这一点?我需要它们嵌套。

1 个答案:

答案 0 :(得分:1)

更新: 您可以在路由器中使用beforeModel(transition)挂钩来检查网址中的内容。

http://example.com/products/manufacturer-209/series-881/tag-17143/none/494822/f不法

import Ember from 'ember';

export default Ember.Route.extend({

  beforeModel(transition) {
    console.log(transition.params.products.choises)
   // if you use this url: http://example.com/products/manufacturer-209/series-881/tag-17143/none/494822/f‌​lawless
   // console log would be: "manufacturer-209/series-881/tag-17143/none/494822/f‌​lawless"
  }

});

至少您拥有网址的其余部分,因此您可以过滤掉重要信息并使用this.transitionTo()重定向到确切位置。

您可以选择以下路线:

http://example.com/products/123/promotions/456

http://example.com/products/awesome_souce/promotions/monday_deal

在第一种情况下,您的路线将如下所示:

this.route('product', { path: "/products/:product_id"}, function() {
  this.route('promotion', {path: "/promotions/:promotion_id"});
});

在第二种情况下,也许是这样的:

this.route('product', { path: "/products/:product_name"}, function() {
  this.route('promotion', {path: "/promotions/:promotion_name"});
});

最后,您的路由处理程序可以下载正确的模型(第一种情况的示例):

// app/routes/product.js
import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    return this.store.findRecord('product', params.product_id);
  }
});

---

// app/routes/product/promotion.js
import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    // you can get access to the parent route model if you need for the api query
    const product = this.modelFor('product');
    return this.store.findRecord('promotion', params.promotion_id);
  }
});

如果您只需要product路线中的参数,而不是返回整个记录,例如您只需return params.product_name,那么您将可以访问this.modelFor('product')的字符串在子路线级别。