自定义Ember Data发送到服务器的内容?

时间:2013-04-21 06:19:25

标签: ember.js ember-data

我的应用中的两个模型是projectsusers。项目可以分配许多用户,反之亦然。我正在使用Ember Data,所以我的模型看起来像这样:

App.Project = DS.Model.extend({
  name: DS.attr('string'),
  created: DS.attr('date'),
  users: DS.hasMany('App.User')
});

在服务器上创建项目时,API期望接收项目的名称和与项目用户对应的ID数组。所以,基本上是这样的:

POST /projects
{
  project: {
    name: 'My Project',
    users: [1, 10, 14]
  }
}

但是,Ember Data在发送POST或PUT请求时不包括用户ID数组。默认情况下,它仅包含name属性。如何修改Ember数据以包含我需要的内容?它是否值得做,或者我现在应该去Discourse路线并放弃Ember Data?

1 个答案:

答案 0 :(得分:2)

假设您使用的是最新版本和RESTAdapter / RESTSerializer,则可以覆盖序列化程序的addHasMany方法。

所以,这是一个如何做到这一点的例子:

App.CustomSerializer = DS.RESTSerializer.extend({
  addHasMany: function(hash, record, key, relationship) {
    var ids = record.get(relationship.key).map(function(item) {
      return item.get('id');
    });

    hash[relationship.key] = ids;
  },
});

App.Store = DS.Store.extend({
  adapter: DS.RESTAdapter.extend({
    serializer: App.CustomSerializer.create()
  })
});

请注意,addHasMany实现取自https://github.com/emberjs/data/blob/master/packages/ember-data/lib/serializers/fixture_serializer.js#L41