要将许多数据模型加载到模型钩子上的路径中,您需要使用RSVP,以便我这样做:
export default Ember.Route.extend( {
queryParams: {
color: {
refreshModel: true,
},
},
model( params ) {
return Ember.RSVP.hash( {
cars: this.store.query( "car", params ),
stats: this.store.findRecord( "shop", params.shopId ),
} );
},
actions: {
filterByColor( color ) {
if ( color !== -1 ) {
this.transitionTo( { queryParams: { color } } );
}
else {
this.transitionTo( { queryParams: { color: undefined } } );
}
},
},
} );
问题在于stats
总是一样,但是使用queryParams我将更改cars
列表。
操作(从按钮触发)将转换到更改queryParams的同一页面,该页面将调用模型钩子(按预期),但它将重新加载模型cars
和stats
,当我只对刷新cars
感兴趣时。
有没有一种方法,有或没有RSVP,在进入时加载两个模型但只在queryParams更改时更新其中一个模型?
答案 0 :(得分:1)
您可以在路由文件中使用setupcontroller hook。当您转换路由时,始终会调用setupController挂钩。每当你更改queryParams时,都会调用模型钩子。 你可以使用setupController钩子将“stats”模型传递给控制器。像那样
Modelhook应该是那样的
model( params ) {
return Ember.RSVP.hash( {
cars: this.store.query( "car", params ),
stats:params.shopId
} );
},
setupController: function(controller, model) {
controller.set('cars', model.cars );
controller.set('stats',this.store.findRecord( "shop", model.shopId ));
}
完成这些更改后,您必须使用.id
的linkto转换,并在控制器或模板中使用cars
stats
模型。您无法在控制器或模板中使用model.cars
或model.stats
。因为我们通过setupcontroller hook在控制器中传递汽车和统计模型。