1

我的应用程序中的两个模型是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?

4

1 回答 1

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

于 2013-04-21T09:57:16.057 回答