2014-02-23 15 views
5

Ich bin relativ neu zu EmberJS, und ich habe für den größten Teil des Abends versucht, einige hasMany und viele zu vielen Beziehungen in einer neuen App beharren, die ich arbeite.Serialisierung async hasMany Beziehungen

Ich verwende Ember Daten mit ActiveModelAdapter es meinen Schienen Backend anzuschließen, die ich verwende die folgenden Versionen von Ember und Ember Daten, die ich verwende ActiveModelSerializers

verwendet.

DEBUG: ------------------------------- 
DEBUG: Ember  : 1.6.0-beta.1+canary.d0f5f254 
DEBUG: Ember Data : 1.0.0-beta.7+canary.d5562867 
DEBUG: Handlebars : 1.1.1 
DEBUG: jQuery  : 1.10.2 
DEBUG: ------------------------------- 

Das grundlegende Problem, das ich habe, ist, dass, wenn Datensätze zu speichern, wird die Assoziation ids nicht zurück an den Server gesendet werden.

nahm ich einen Tauchgang in die ActiveModelSerializer source, und fand, dass es hasMany Serialisierung

var ActiveModelSerializer = RESTSerializer.extend({ // ... 
    /** 
    Does not serialize hasMany relationships by default. 
    */ 
    serializeHasMany: Ember.K, 
} 

Ich habe kommen mit der folgenden rudimentäre Lösung überspringt, die bisher funktioniert, aber ich frage mich, ob es war eine sauberere Lösung, die den Ember-Konventionen und Best Practices folgt.

DS.ActiveModelAdapter.reopen 
    namespace: 'api/v1' 

App.Store = DS.Store.extend 
    adapter: '-active-model' 

App.ApplicationSerializer = DS.ActiveModelSerializer.extend 
    serializeHasMany: (record, json, relationship) -> 
    if relationship.options.async 
     key = relationship.key 
     data = record.get("data.#{key}") 
     if data? 
     json[@keyForRelationship(key, "hasMany")] = data.mapBy(Ember.get(this, "primaryKey")) 
    return 
+1

Verwendet Ihre Lösung, funktioniert gut, ich habe gerade relation.options.async entfernt, was nicht mein Fall ist. Vielleicht ist es an der Zeit, ein Problem in ember-data github zu öffnen? –

Antwort

1

In meinem Verständnis ist der Grund, dass die aktive Modell Serializer überspringt viele Beziehungen hat, ist, dass es das Backend damit umgehen erwartet. In einer relationalen Datenbank werden die Werte von a has many nicht explizit im übergeordneten Datensatz gespeichert. Es genügt, den Fremdschlüssel im Kind zu speichern. Wenn Sie nach einer saubereren Lösung fragen - vielleicht ist ActiveModelSerializer nicht die beste Lösung für Ihre API.

+0

Sie machen einen guten Punkt. Wie triggern Sie dann das Speichern der Kinder in dieser Situation (mit Ember und JSONAPI mit AMS)? – rmcsharry

+0

Können Sie das vielleicht beantworten? http://stackoverflow.com/questions/39506375/emberjs-2-7-has-many-configuration-for-ember-data-and-active-model-serializers – rmcsharry

Verwandte Themen