EmberJS在嵌套路由中获取动态参数

时间:2014-08-08 08:16:37

标签: ember.js ember-data

我正在使用Ember JS开发一个网站。 我创建了一个这样的嵌套路线:

//router
this.resource('store/checkout', {path: '/store/checkout/:order_id'}, function(){
      this.resource('store/checkout-lines', {path: ''});
  });

这导致route / store / checkout /:order_id调用路由和相应的tempaltes。 存储/结帐模板的模板存储/结帐行有{{outlet}}。 在路线中我有这个代码:

//store/chekout
export default Ember.Route.extend({
    model: function(params) {
        return this.store.find('order', params.order_id);
    }
});

//store/checkout-lines
export default Ember.Route.extend({
    model: function(params) {
        var order_id = params.order_id; //this does not work
        return this.store.find('order-item', {orderId: order_id});
    }
});

但我的问题是,在商店/结账行的路线中,我无法获得orderId。 我怎样才能做到这一点?或者我是在错误的轨道上,应该以另一种方式做到这一点? 我的目标是route / store / checkout /:order_id应该调用服务器来获取order和orderItems。

1 个答案:

答案 0 :(得分:4)

有些人似乎错过了,即使您正在访问嵌套路线,也会加载父路线的模型。在嵌套路由中,您可以使用modelFor(type)从父路径轻松获取模型,然后从那里获取您的信息。在你的情况下,它会是这样的。

//store/checkout-lines
export default Ember.Route.extend({
    model: function(params) {
        var order_id = this.modelFor('checkout').get('id');
        return this.store.find('order-item', { orderId: order_id });
    }
});

这看起来似乎是一个额外的步骤,但当你接触它时,它确实很有意义并且运作良好。