我对EmberJS很新,而且我一直在为大部分时间摆弄,试图在我正在开发的新应用程序中坚持一些hasMany和许多关系。
我正在使用带有ActiveModelAdapter
的Ember数据将其连接到使用ActiveModelSerializers
的导轨后端
我正在使用以下版本的Ember和Ember Data。
DEBUG: -------------------------------
DEBUG: Ember : 1.6.0-beta.1+canary.d0f5f254
DEBUG: Ember Data : 1.0.0-beta.7+canary.d5562867
DEBUG: Handlebars : 1.1.1
DEBUG: jQuery : 1.10.2
DEBUG: -------------------------------
我遇到的基本问题是,在保存记录时,关联ID不会被发送回服务器。
我深入研究了ActiveModelSerializer source,发现它跳过了很多序列化
var ActiveModelSerializer = RESTSerializer.extend({ // ...
/**
Does not serialize hasMany relationships by default.
*/
serializeHasMany: Ember.K,
}
我已经提出了以下基本解决方案,到目前为止工作正在进行,但我想知道是否有一个更符合Ember惯例和最佳实践的清洁解决方案。
DS.ActiveModelAdapter.reopen
namespace: 'api/v1'
App.Store = DS.Store.extend
adapter: '-active-model'
App.ApplicationSerializer = DS.ActiveModelSerializer.extend
serializeHasMany: (record, json, relationship) ->
if relationship.options.async
key = relationship.key
data = record.get("data.#{key}")
if data?
json[@keyForRelationship(key, "hasMany")] = data.mapBy(Ember.get(this, "primaryKey"))
return
答案 0 :(得分:1)
根据我的理解,活动模型序列化程序跳过的原因有许多关系,它希望后端处理它。在关系数据库中,有许多的值未明确保存在父记录中。将外键保存在子项中就足够了。当您要求更清洁的解决方案时 - 或许ActiveModelSerializer
不适合您的API。