操纵RecordArray

时间:2013-02-27 01:32:15

标签: ember.js ember-data

我有一个从App.ModelName.find()返回的RecordArray。

我想用它做一些事情,比如:

  • 通过
  • 中的记录集分页
  • 将来自另一个findQuery的记录添加到数组中

我可能感到困惑,但似乎很难(或至少没有记录)如何处理从find()/ findAll()/ findQuery()返回的记录,而不是循环遍历集和显示他们正常。

从all()返回的数组更加复杂,可能更接近身份映射。

这一切都不可能,但如果不是,我可以打开问题并开始自己解决。

1 个答案:

答案 0 :(得分:4)

Ember Data返回的RecordArray并不是真正意义上的修改。特别是,Model.find()(sans-argument)和Model.all()返回实时数组,当新的匹配记录可用时,这些数组会不断更新。

如果要操作模型数组,最好使用Model.find({})(参数使其使用findQuery())并观察isLoaded属性。像这样:

query: null,

init: function() {
  // should really do this in the route
  this.set('query', Model.find({}));
},

content: function() {
  var query = this.get('query');
  return query && query.get('isLoaded') ? query.toArray() : [];
}.property('query.isLoaded')

现在内容返回一个普通的旧数组,你可以使用它(虽然你仍然需要等待记录加载才能开始修改数组)。

如果问题是您希望查询继续更新,请考虑使用Model.filter(),它返回像find()这样的实时数组,但接受匹配的函数。请注意,令人困惑的是,find()all()filter()都没有isLoaded属性。

至于分页,您可以尝试a simple mixin approach,或更精细的rails-based solution