如何从ember对象中获取数据

时间:2015-06-16 19:31:39

标签: javascript ember.js kendo-grid

我是一个相当陌生的人,我想知道从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

1 个答案:

答案 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