在Ember中保存到服务器时更改模型的JSON根目录

Dav*_*vid 7 javascript ember.js ember-data

我有一个博客应用程序,API调用用户"用户",但我的Ember模型是"作者".

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

我将传入的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;
    }
});
Run Code Online (Sandbox Code Playgroud)

但是当我坚持服务器时,我无法弄清楚如何更改POST/PUT的根目录.我希望我的root是"用户"或"用户"(取决于具体情况).服务器目前从Ember获取此参数:

{"author"=>{"name"=>"asdf", "email"=>"asdf"}, "user"=>{}}
Run Code Online (Sandbox Code Playgroud)

在与服务器通信时,如何告诉Ember使用"user/s"作为我的密钥名称?

例:

{"user"=>{"name"=>"asdf", "email"=>"asdf"}}
Run Code Online (Sandbox Code Playgroud)

Rya*_*auh 6

我想你正在寻找serializeIntoHash钩子.

App.AuthorSerializer = DS.RESTSerializer.extend({
  serializeIntoHash: function(hash, type, record, options) {
    hash["user"] = this.serialize(record, options);
  }
});
Run Code Online (Sandbox Code Playgroud)