渲染前修改数据

时间:2017-08-04 18:51:41

标签: javascript ember.js ember-data

在下面的示例中,在渲染模板之前更改数据的正确方法是什么?

从我的路线

model()

  model({contractId}){
    const cities = this.store.query('city', {contractId});
    return Ember.RSVP.hash({ cities});
  }

然后在我的模板中:

{{orders/order-form cities=model.cities}}

最后,在我的组件中,我想改变城市中的某些东西,所以我用这种方式创建了计算对象:

 cityOptions: Ember.computed('cities', function(){
    return this.get('cities').map((data)=> ({key: data.id, value: data.name}));
  }),

this.get('cities')返回的内容如下:Class {modelName: "city", query: Object, store: Class, manager: RecordArrayManager…}而不是数据。有没有人知道从this.get('cities')获取纯数据的好方法?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这应该有效:

resources

重要的是,import Ember from 'ember'; const {get} = Ember; export default Ember.Component.extend({ cityOptions: Ember.computed('cities.@each.name', 'cities.@each.id', function(){ return this.get('cities').map((city) => ({ key: get(city, 'id'), value: get(city, 'name'), })); }), }); 是一个余烬数据对象的余烬数组。它们不是普通的普通JS对象,因此您必须使用citiesEmber.get(obj, 'prop')而不是obj.get('prop')

答案 1 :(得分:-1)

你总是可以像这样使用toJSON()...... this.get('cities').toJSON() cities是一个DS.model数组,如果你想要一个POJO,你需要转换它。

cityOptions: Ember.computed('cities', function(){ return 
  this.get('cities').map((aModel)=> ( 
     return aModel.toJSON().map((data)=> (
         return {key: data.id, value: data.name})) 
     )); 
}),