2014-02-27 44 views
6

我有一个博客应用程序,API调用用户“Users”,但我的Ember模型是“Author”。保存到Ember服务器时更改模型的JSON根

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

我映射传入的JSON与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; 
    } 
}); 

但我无法弄清楚如何改变我的POST根/ PUT当我坚持到服务器。我希望我的根是“用户”或“用户”(取决于具体情况)。服务器目前得到这个从灰烬作为它的参数:

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

我如何告诉灰烬使用“用户/秒”作为我的键名与服务器通话是什么时候?

例子:

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

回答

5

我认为你正在寻找serializeIntoHash钩。

App.AuthorSerializer = DS.RESTSerializer.extend({ 
    serializeIntoHash: function(hash, type, record, options) { 
    hash["user"] = this.serialize(record, options); 
    } 
}); 
+0

这似乎在接收方,理查德A建议,下面,但问题涉及配置发送方。 –

+0

是的,这个钩子在model.save()被发送到服务器之前调用 –

+1

http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_serializeIntoHash “您可以使用此方法定制序列化为JSON的根键默认情况下,REST序列化程序发送驼峰化的根键。例如,您的服务器可能会期望使用下划线的根对象。 –

相关问题