2017-08-04 93 views
0

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

从我的路线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')获得纯数据?任何帮助将不胜感激。

+0

总是使用'get'方法来获取属性。如果你想将'DS.RecordArray'转换为正常的数组,那么你可以使用'toArray' – kumkanillam

回答

1

这应该工作:

import Ember from 'ember'; 

const {get} = Ember; 

export default Ember.Component.extend({ 

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

最重要的这里,是cities是烬数据对象的余烬阵列。它们不是普通的普通JS对象,所以你必须使用Ember.get(obj, 'prop')obj.get('prop')而不是obj.prop

-1

,你总是可以使用的toJSON()这样的... this.get('cities').toJSON() 城市是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})) 
    )); 
}), 
+0

我不能在Ember.Component中做到这一点 –

+0

好吧,我以为你是在一个控制器,因为你提到的路线和模板..但我认为 并不重要,您可以将模型传递给您的组件,然后进行转换。地图((数据)=>( )' cityOptions:Ember.computed >({key:data.id,value:data.name})) )); }), ' –

+0

isch抱歉格式为 –