3

App.ModelName.find() から返された RecordArray があります。

私はそれでいくつかのことをしたいと思います:

  • 内の一連のレコードのページネーション
  • 別のfindQueryから配列にレコードを追加する

混乱するかもしれませんが、セットをループして通常どおり表示する以外に、find()/findAll()/findQuery() から返されるレコードを操作する方法が難しい (または少なくとも文書化されていない) ようです。 .

これは、all() から返される配列によってさらに複雑になります。これは、アイデンティティ マップに近いように思われます。

これはどれも不可能かもしれませんが、そうでない場合は、問題を開いて自分で作業を開始できます。

4

1 に答える 1

4

Ember Dataによって返されるは、RecordArray実際には変更を目的としたものではありません。特に、Model.find()(sans-argument)およびModel.all()returnライブ配列は、新しい一致レコードが利用可能になると更新を続けます。

モデルの配列を操作する場合は、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

ページネーションに関しては、単純なミックスインアプローチ、またはより複雑なレールベースのソリューションを試すことができます。

于 2013-02-28T03:11:59.917 に答える