Ok、私はEmberのことをとても熟知しています。Ember Dataは、保存されたモデルデータのインスタンスに対してどのように書き込むのですか?
EmberアプリケーションがJSONAPI標準に準拠していないAPIと通信しているため、Ember Dataを使用するために独自のシリアライザを作成し始めました。しかし、私は、同じリソースに複数のリクエストを行うと、そのデータがストアに書き込むのに問題があることを発見しています。同じリソースへの連続したリクエストは、常に次のエラーで応答します。
はTypeError:私の限られた理解から、私は店に送付していたデータがあることを意味するプリミティブな値
にオブジェクトを変換できません。文字列のように扱われます。
私はLIKE「項目を列挙し」私のモデルにfindAll
を書かれている私のアプリケーションのルートで
:私はlisting-の要求のいずれかのタイプを行う際に、ネストされた「ユーザー」ルートで
model: function() {
return this.store.findAll('listing-item');
},
リスト項目のデータのためのアレイ応答(クエリ、findAllの)を返すアイテムデータは、私が取得:
TypeError: Cannot convert object to primitive value
at EmptyObject.SETTER_FUNCTION [as title] (ember.debug.js:20672)
at assign (<anonymous>)
at InternalModel.setupData (internal-model.js:244)
at Class._load (store.js:1728)
at Class._pushInternalModel (store.js:2055)
at Class._push (store.js:1995)
at finders.js:141
at Backburner.run (ember.debug.js:720)
at Class._adapterRun (store.js:2253)
at finders.js:139
(タイトルは私のリスト項目モデルフィールドです)。私は先に述べたように、私のAPIはJSONAPI規格に準拠していない
ので、私はそうのようなリスト項目のシリアライザを書いた:
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
normalizeArrayResponse(store, primaryModelClass, payload) {
payload.data = [];
payload.listing_item._data.forEach(this.formatListingItemArray, payload.data);
delete payload.listing_item;
return payload;
},
formatListingItemArray(listingItem) {
this.push({
type: "listing-item",
id: listingItem.id,
attributes: {
title: listingItem.title,
description: listingItem.description,
buy_now_price: listingItem.buy_now_price,
created_at: listingItem.created_at,
category_id: listingItem.category_id,
subcategory_id: listingItem.subcategory_id,
identity_id: listingItem.identity_id,
listing_number: listingItem.listing_number,
brand_new: listingItem.brand_new,
sold: listingItem.sold,
},
});
},
});
だから私は私の質問は、エンバーデータは何をやっているされているとこのエラーが発生するためのデータオブジェクトがあり、Emberデータを消費するために自分のデータをフォーマットする際に何が間違っているのでしょうか。
UPDATES:
のみトップ3のフィールドは、このエラーが発生する原因になっているかのように見えます。シリアライザで 'title'、 'description'、 'buy_now_price'の属性をコメントアウトすると、このエラーは発生しません。また、これは、ルートに移動するときにのみ発生します。アプリケーションがロードされるときに/ userルートにある場合、両方の要求が期待通りに機能します。
私はember-dataコードをクロールしており、internal-model.jsファイルには、ストア内の現在の属性を調べ、渡されるデータと比較するセットアップ機能があることがわかりましたシリアライザから。次に、シリアライザの新しいデータをストアオブジェクトにコピーするassign()を実行します。しかし何らかの理由で、私のストアオブジェクトは、問題のあるフィールド(タイトル、説明、およびbuy_now_price)のストアから戻って来るgetterおよびsetter関数のセットを持っているようです。私が今知る必要があるのは、なぜこれらの機能が乗って来るのか、これを引き起こすために何をしたのですか?
Picture of getters/setters on ember-data object
事前のおかげで、私はより良いコンテキストを与えるために提供する必要がある任意のより多くの情報がありますなら、私に知らせてください。