【问题标题】:Accessing data from recordArray in Ember在 Ember 中从 recordArray 访问数据
【发布时间】:2017-03-10 05:49:29
【问题描述】:

假设我有一个模型 X

  idOfX: DS.attr()
  shouldBeIncluded: DS.attr(),
  type: DS.attr(),
  valueOfX: DS.attr(

我正在尝试使用 ember store 的 findAll/peekAll 方法获取类型 x 的所有元素。

store 方法用数据解析后,我希望能够过滤type 属性上的数据或使用valueOfX 属性进行一些操作。

访问这些值的最佳方式是什么。

注意:以前我访问的是 recordArray 中 internalModel 对象的 record 属性。但是对于 ember 数据 2.11.x,记录属性为空,直到我使用 getRecord 方法显式获取每条记录。而且我不知道这是为什么/如何发生的。

有人能建议分享一下吗?

我正在使用 ember-cli@2.10.0, ember@2.10.0

【问题讨论】:

  • 避免属性名称type 我猜它是为 ember-data 保留的。在更高版本之一中,您可能会遇到错误。迭代参考这个答案stackoverflow.com/a/41716142/5771666
  • 我编这个模型只是为了举例,假设type改成isOfType
  • 好的。那么易卜拉欣的回答适用于您的问题。您可以使用 Ember.ArrayProxy 中定义的任何可枚举方法

标签: ember.js ember-data ember-cli


【解决方案1】:

你不应该使用内部模型。

要访问模型实例,您需要这样做:

this.get('store').findAll('x-model').then((dataList) => {
  //deal with dataList like an array
  dataList.forEach((item) => {
     //the item is the exact model instance and 
     //you can access to attributes like belo
     let type = item.get('type');  //for example
  });
});

peekAll 是一样的

【讨论】:

  • 在这种情况下,dataList 的类型为 subclass of Ember.ArrayProxy。我需要获取每条记录的实际内容来进行操作。所以,dataListget 方法调用它,使用 contents 参数将获取内容数组。这是每个记录的 internalModel 数组。而问题又回到了它的起点。
  • @yuvrajzohan 您可以遍历dataList 并访问每个元素。无需直接访问content。我更新了我的答案以澄清
  • 这似乎工作正常,并且符合我的需要。 ember data 中的文档没有明确指定数据访问。谢谢。
  • 这个答案是正确的,但您也可以只这样做dataList.toArray() 而不是dataList.forEach(...),具体取决于用例。
  • @alex 我最终使用了 forEach。但是与 dataList.forEach() 相比,dataList.toArray() 有什么好处吗?因为无论如何我都必须迭代 dataList,它是数组类或 arrayProxy 类。
猜你喜欢
  • 2015-04-10
  • 2014-11-07
  • 2016-02-25
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多