我正在使用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。
答案 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 });
}
});
这看起来似乎是一个额外的步骤,但当你接触它时,它确实很有意义并且运作良好。