6

-- Ember Data 2.7.1 を使用 --

最初に toArray() を使用して配列に変換せずに、レコードのコレクションの順序を逆にしようとしています。このオブジェクトのコレクションは、this.store.findAll('history-item') によって返される promise から取得されます。

プレーンなJavaScriptにするのではなく、これを残り火の方法で行いたいです。typeError: internalModel.getRecord が record-array.js から来ています。objectAtContent() を実行しようとすると、何らかの理由で、探しているコンテンツに型がないように見えます。スタック トレースを介して、私が扱っているオブジェクトが [Class] であることがわかります。class は履歴アイテム モデルです。objectAtContent() の前のいくつかのスタック呼び出しで、処理されるオブジェクトは、その履歴アイテム モデルから型属性を持たない他のクラス オブジェクトに切り替わります。

Ember Inspector を使用して自分のデータを正しく表示することができます。また、元のレコード コレクションをテンプレートに表示すると、正しく表示されます。

誰かがこれに遭遇しましたか?

いくつかの考えと考慮事項:

- findAll() がバックグラウンドでリロードされているため、反転が許可されていない約束でどのように機能するかについて、何か特別なことはありますか? ライブデータをリロードし続けたいです。

-私は ember-cli-mirage を使用してデータベースとエンドポイントをモックしています。私が思う文字の指示に従っています。Mirage には未構成の JSONAPISerializer を使用し、ember には未構成の JSONAPIAdapter を使用しています。裏から送られてくるメタデータと何か関係があるのでしょうか? モデルやレコードが設定されていないことに何か関係があるのでしょうか? 私がしなければならない特別なことはありますか?

モデルを定義し、それを元に戻そうとするルート セグメント: [注: ルートでデータを準備する (順序付けする) ことは慣例ではないかもしれませんが、説明を簡単にするためにここに入れました。私は通常、コントローラーまたはコンポーネントの外側で行います]

  model(){
    return this.get('store').findAll('history-item').then(function(items){
      return items.reverseObjects();
    }).catch(failure);

履歴リスト モデルの宣言:

  export default DS.Model.extend({
    question: DS.attr('string'),
    answer: DS.attr('string')
  });

Ember-Cli-Mirage config.js エンドポイント:

  this.get('/history-items', (schema) => {
     return schema.historyItems.all();
  });

履歴項目の Ember-Cli-Mirage フィクスチャ:

  export default [
    {id: 1, question: "1is this working?", answer: "Of course!"}
  }

エラー:

  TypeError: internalModel.getRecord coming from record-array.js

この問題は、セーブ ア レコードを作成しようとしたときにも発生します。保存は成功しますが、モデルがリロードされる (および元に戻そうとする) と、同じエラーで失敗します。私がフィクスチャであるかどうかは関係ありません。

コントローラ:

  var newHistoryItem = this.store.createRecord('history-item', {
    question: question,
    answer: answer
  });
  newHistoryItem.save().then(success).catch(failure);
4

2 に答える 2

4

store.findAllandから返される結果はstore.queryAdapterPopulatedRecordArray (ライブ配列) です。 のような変更メソッドaddObject,addObjects,removeObject,removeObjects, unshiftObject,unshiftObjects,pushObject,pushObjects,reverseObjects,setObjects,shiftObject,clear,popObject,removeAt,removeObject,removeObjects,insertAtは使用しないでください。

対応するディスカッションProposed PR to throw error を参照し、変更の代わりに toArray() を使用して配列をコピーすることを提案してください。

于 2016-08-27T18:46:46.183 に答える