我是一个相当陌生的人,我想知道从ember对象中提取数据的最快方法。我使用this.store.find('modelName
);在我的路线中加载了包含大量记录的模型。
我使用{{kendo-ui.kendo-table descriptor=tableDescriptor data=model}}
在视图上创建了一个组件。我的控制器定义了要传递给我的组件的其他参数(descriptor
)。
在我的components.js
我' m'通过使用
data
export default Ember.Component.extend({
didInsertElement: function() {
var columns = this.get('descriptor.columns'); // this is right
var model = this.get('data')['content']; // this returns the objects of the model
var height = this.get('descriptor.height'); // this is ok too
Ember.$('#kendo-table').kendoGrid({
dataSource: {
data: model,
pageSize: 100
},
height: height,
scrollable: {
virtual: true
},
groupable: true,
sortable: true,
columns: columns
});
}
});
在var model = this.get('data')['content'];
行上,这给了我一个Ember类数组。在每个类中,有一个_data
对象,它保存实际类的值。
最简单的解决方案是循环并提取_data
但这对大型模型阵列没有好处。有没有快速的方法从我的ember对象数组中提取所有_data
?
答案 0 :(得分:3)
您可以使用getProperties
方法。 http://emberjs.com/api/classes/Ember.Object.html#method_getProperties
要一次获取多个属性的值,请使用字符串列表或数组调用getProperties:
record.getProperties('firstName', 'lastName', 'zipCode');
// { firstName: 'John', lastName: 'Doe', zipCode: '10011' }
您可以定义计算属性dataArray
:
dataArray: function() {
return this.get('data').map( function(item) {
return item.getProperties('id', ... ); // your list of properties
});
}.property('data.[]'),
didInsertElement: function() {
//...
Ember.$('#kendo-table').kendoGrid({
dataSource: {
data: this.get('dataArray'),
//...
},
// ...
});
}
<强>更新强>
对于记录(DS.Model
),您可以使用toJSON
方法。使用DS.JSONSerializer获取记录的JSON表示。
toJSON
将可选哈希作为参数,目前支持的选项为:
includeId: true
如果记录的ID应包含在JSON表示中。http://emberjs.com/api/data/classes/DS.Model.html#method_toJSON