Ok, also ich bin neu in Ember, also ertragen Sie mit mir.Wie schreibt Ember Data über Instanzen von gespeicherten Modelldaten
Ich habe eine Ember-Anwendung, die mit einer API kommuniziert, die nicht JSONAPI-Standards entspricht, also habe ich begonnen, meine eigenen Serialisierer zu schreiben, um Ember-Daten zu verwenden. Ich stelle jedoch fest, dass die Daten beim Schreiben mehrerer Anfragen an dieselbe Ressource Probleme beim Schreiben in den Speicher haben. Aufeinanderfolgende Anfragen an die gleiche Ressource reagiert immer mit dem folgenden Fehler:
Typeerror: Objekt kann nicht auf Grundwert
Welche von meinem begrenzten Verständnis impliziert wandeln, dass die Daten, die ich in den Laden sende ist wie eine Schnur behandelt werden. für die listing-
model: function() {
return this.store.findAll('listing-item');
},
In einer verschachtelten 'user' Route, wenn ich jede Art von Anfrage zu tun:
in meiner Anwendung Route Ich habe ein findAll
zu meinem Modell 'Listing-Artikel' wie so geschrieben Positionsdaten, die eine Array Antwort (Abfrage, findAll) für die listing-Positionsdaten liefern, die ich erhalte:
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
(Titel ist ein Feld in meinem Auflistung Element-Modell).
Wie ich bereits erwähnt, meine API haftet nicht an JSONAPI Standards, also habe ich eine Auflistung-Artikel Serializer wie so geschrieben:
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,
},
});
},
});
So nehme ich meine Frage ist, was ist Ember Daten tun mit meinem Datenobjekt für diesen Fehler auftreten, und was könnte ich falsch machen beim Formatieren meiner Daten für Ember-Daten zu konsumieren.
UPDATES:
Es scheint, als ob nur die oberen 3 Felder diesen Fehler verursachen. Wenn ich die Attribute 'title', 'description' und 'buy_now_price' in meinem Serializer auskommentiere, bekomme ich diesen Fehler nicht. Es scheint auch, dass dies nur auftritt, wenn ich zur Route navigiere. Wenn ich beim Laden der Anwendung in der Benutzerroute bin, funktionieren beide Anfragen wie erwartet.
Ok, also habe ich durch ember-data code gecrawlt und festgestellt, dass es in der internal-model.js-Datei eine Setup-Funktion gibt, die die aktuellen Attribute im Speicher überprüft und sie mit den übergebenen Daten vergleicht aus dem Serializer. Dann wird assign() verwendet, um die neuen Daten des Serializers in das Speicherobjekt zu kopieren. Aus irgendeinem Grund scheint es, dass mein Stores-Objekt eine Reihe von "Getter" - und "Setter" -Funktionen hat, die aus dem Speicher für die problematischen Felder (Titel, Beschreibung und buy_now_price) zurückkommen. Was ich jetzt wissen muss ist, warum diese Funktionen für die Fahrt kommen und was habe ich getan, um dies zu verursachen?
Picture of getters/setters on ember-data object
Vielen Dank im Voraus, lassen Sie mich wissen, wenn es mehr Informationen, die ich, um zu schaffen, muß eine besseren Kontext zu geben.