在Ember中使用RSVP重新加载一个模型

时间:2016-05-25 08:48:56

标签: ember.js

要将许多数据模型加载到模型钩子上的路径中,您需要使用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的同一页面,该页面将调用模型钩子(按预期),但它将重新加载模型carsstats,当我只对刷新cars感兴趣时。

有没有一种方法,有或没有RSVP,在进入时加载两个模型但只在queryParams更改时更新其中一个模型?

1 个答案:

答案 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.carsmodel.stats。因为我们通过setupcontroller hook在控制器中传递汽车和统计模型。