3

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

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

  • 对内的记录集进行分页
  • 将另一个 findQuery 中的记录添加到数组中

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

从 all() 返回的数组使这更加复杂,这似乎更接近于一个恒等映射,也许。

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

4

1 回答 1

4

Ember Data 返回的RecordArrays 并不真正用于修改。特别是,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')

现在 content 返回一个普通的旧数组,您可以随心所欲地使用它(尽管您仍然需要等待记录加载才能开始修改数组)。

如果问题是您希望查询不断更新,请考虑使用Model.filter(),它返回一个类似于 的实时数组find(),但接受匹配函数。请注意,令人困惑但有意为之的是find()all(), 和filter()都没有isLoaded属性。

至于分页,你可以尝试一个简单的 mixin 方法,或者更复杂的基于 rails 的解决方案

于 2013-02-28T03:11:59.917 回答