我的应用中的两个模型是projects
和users
。项目可以分配许多用户,反之亦然。我正在使用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?
答案 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