Ember RESTAdapter - 在模型中有很多关系 - 如何用POST发送空数组?

时间:2015-04-22 07:43:52

标签: ember.js ember-cli

Ember noob在这里 -

我有两个模型,其中 hasMany 关系如下 -

var Season = DS.Model.extend({
    name: DS.attr('string'),
    periods: DS.hasMany('period', {
        async: false
    })
});

var Period = DS.Model.extend({
    from: DS.attr('date'),
    to: DS.attr('date'),
    season: DS.belongsTo('season')
});

一个季节可以没有任何时期存在 - 这就是我创建季节记录并保存的方法 -

        var season = this.store.createRecord('season', {
            name: name
        });

        season.save().then(function(season){
                   /* season saved */
        });

POST请求有效负载如下所示 -

   {
    "season" : {
         "name" : "test"
     }
   }

但后端API期望有效负载如下所示 - 使用空句点数组

    {
    "season" : {
         "name" : "test"
         "periods" : []
     }
   }

我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

在一般情况下,您可以创建一个序列化程序,为所有hasMany关系发送[]。

串行器/ application.js中:

import DS from 'ember-data';

export default DS.RESTSerializer.extend({
  serialize(snapshot, options) {
    var json = {};

    snapshot.eachAttribute(function(name) {
      json[name] = snapshot.attr(name);
    });

    snapshot.eachRelationship(function(name, relationship) {
      if (relationship.kind === 'hasMany') {
        const list = snapshot.hasMany(name, { ids: true });
        if(Ember.isEmpty(list)){
          json[name] = [];
        }else{
          json[name] = list;
        }
      }
    });

    return json;
  }
});