Ember.js 在Ember中使用RSVP仅重新加载一个模型
要将许多数据模型加载到模型挂钩上的路由中,您需要使用RSVP,因此我将执行以下操作:Ember.js 在Ember中使用RSVP仅重新加载一个模型,ember.js,Ember.js,要将许多数据模型加载到模型挂钩上的路由中,您需要使用RSVP,因此我将执行以下操作: export default Ember.Route.extend( { queryParams: { color: { refreshModel: true, }, }, model( params ) { return Ember.RSVP.hash( { cars: this.store.query( "car", params ),
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
列表
该操作(由按钮触发)将转换到同一页面,更改查询参数,这将调用模型挂钩(如预期),但它将重新加载两个模型,cars
和stats
,而我只对刷新cars
感兴趣
有没有一种方法,无论是否使用RSVP,都可以在输入时加载两个模型,但在查询参数更改时只更新其中一个模型?您可以在路由文件中使用setupcontroller钩子。当您传输到路由时,始终调用setupController钩子。无论何时更改queryParams,都会调用模型钩子。 您可以使用setupController钩子将“stats”模型传递到控制器。那样
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 ));
}
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 ));
}
在这些更改之后,您必须使用link来转换.id
,并在控制器或模板中使用汽车
统计数据
模型。您不能在控制器或模板中使用model.cars
或model.stats
。因为我们在控制器中通过setupcontroller钩子传递汽车和统计模型