2014-02-27 6 views
6

Ich habe eine Blog-Anwendung, wo die API die Benutzer "Benutzer" nennt, aber mein Ember-Modell ist "Autor".Ändern der JSON-Wurzel eines Modells beim Speichern auf den Server in Ember

App.Author = DS.Model.extend({ 
    name: DS.attr(), 
    posts: DS.hasMany('post', {async: true}), 
    email: DS.attr() 
}); 

I Karte eingehende JSON mit einem AuthorSerializer:

App.AuthorSerializer = DS.RESTSerializer.extend({ 
    normalizePayload: function(type, payload) { 
     return this.translateRootKey('user', 'author', payload); 
    }, 
    translateRootKey: function(server_word, client_word, payload) { 
     var response = {}, 
      key = payload[server_word] ? client_word : Ember.String.pluralize(client_word), 
      value = payload[server_word] ? payload[server_word] : payload[Ember.String.pluralize(server_word)]; 
     response[key] = value; 
     return response; 
    } 
}); 

Aber ich kann nicht herausfinden, wie die Wurzel meines POST ändern/PUT, wenn ich auf den Server bin persistierenden. Ich möchte, dass meine root "user" oder "users" ist (abhängig von der Situation). Der Server ist derzeit immer dies von Ember als Parameter:

{"author"=>{"name"=>"asdf", "email"=>"asdf"}, "user"=>{}} 

Wie kann ich feststellen Ember „user/s“ zu verwenden, wie mein Schlüsselname mit dem Server sprechen?

Beispiel:

{"user"=>{"name"=>"asdf", "email"=>"asdf"}} 

Antwort

5

Ich glaube, Sie für den serializeIntoHash Haken suchen.

+0

Dies scheint auf der Empfängerseite zu funktionieren, wie Richard A vorschlägt, aber die Frage bezieht sich auf die Konfiguration der Sendeseite. –

+0

Ja, dieser Hook wird aufgerufen, bevor model.save() an den Server gesendet wird –

+1

http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_serializeIntoHash "Sie können diese Methode verwenden, um Passen Sie die in JSON serialisierten Stammschlüssel an. Standardmäßig sendet der REST-Serializer camelisierte Stammschlüssel. Beispielsweise könnte Ihr Server unterstrichene Stammobjekte erwarten. " –

Verwandte Themen