2016-06-22 7 views
1

Von dem, was ich bisher gelernt habe, weiß ich, dass ich etwas im Serialisierer tun muss, um das folgende zu lösen, aber ein bisschen verloren ...Ember: "Map" nicht übereinstimmende API-Objekte (asp.net Web API) zu ember Modelle

Meine API, ein Objekt mit dem Namen PortfolioSummaryDto zurückgeben, und mein Ember-Modell heißt "fertololitistitem".

Das gibt mir die folgenden Fehler (den Sinn machen) Encountered „portfolio_summary_dtos“ in Nutzlast, aber es wurde kein Modell für Modellnamen „Portfolio-Zusammenfassung-dto“ (aufgelöst Modellname mit dealview1 @ Serializer gefunden: -Rest : .modelNameFromPayloadKey („portfolio_summary_dtos“))

In Zukunft jeden API-Aufruf nennen Ich mag würde, wo das zurückgegebene Objekt/s und sein Name (und Eigenschaftsnamen) ist völlig verschieden von meinen Ember Modellen.

Kann mir jemand auf etwas lesen, wie man api-Objekte zu ember-Modellen "mappt"?

Antwort

0

Die allgemeine Idee von ember.js ist die Konvention über die Konfiguration. Daher müssen Sie die Attribute und Namen Ihres ember.js-Modells auf eine bestimmte Weise benennen, um auf die zugrunde liegenden JSON-Eigenschaften Ihrer Nutzlast zugreifen zu können.

PortfolioSummaryDto -> Portfolio-Zusammenfassung-dto

Wenn Sie jedoch dieses Verhalten anpassen wollen, müssen Sie diese Konvention außer Kraft setzen.

Um den Serialisierungsprozess zu überschreiben, müssen Sie Ihren eigenen ember.js-Serializer implementieren. Nehmen wir an, Sie wollen nicht eine individuelle Serializer für jedes Ember.js Modell implementieren, dann können Sie das folgende für Modellnamen tun:

Sie eine Konfigurationsdatei wie folgt erstellen in app/application/model-mapping.js:

export default { 
    'PortfolioSummaryDto': 'portfoliolistitem', 
    /* add more here */ 
} 

Diese Datei stellt die Zuordnung von Ihren Modelldateien zu ember.js-Modelldateien dar. Dann erstellen oder passen Sie Ihren Application-Serializer auf diese Weise an:

import DS from 'ember-data'; 
import mappingTable from './model-mapping'; 

export default DS.RESTSerializer.extend({ 
    modelNameFromPayloadKey(payloadKey) { 
    return mappingTable[payloadKey] || payloadKey; 
    } 
}); 
+0

das macht vollkommen Sinn, danke! Wie wäre es mit Mapping-Eigenschaften (denke ich denke "Auto Mapper" zu viel noch, kommt von .net/mvc) – Nico

+0

siehe [hier] (http://emberjs.com/api/data/classes/DS.RESTSerializer.html# method_normalize) für Informationen zum Normalisieren (Ändern) der JSON-Antwort, die Sie von Ihrem Server erhalten – Timm