Ember.js 在Ember中使用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 ),

要将许多数据模型加载到模型挂钩上的路由中,您需要使用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
列表

该操作(由按钮触发)将转换到同一页面,更改查询参数,这将调用模型挂钩(如预期),但它将重新加载两个模型,
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钩子传递汽车和统计模型