我对 EmberJS 还很陌生,晚上的大部分时间我都在摆弄,试图在我正在开发的新应用程序中坚持一些 hasMany 和多对多的关系。
我正在使用 Ember DataActiveModelAdapter
将其连接到我正在使用的 rails 后端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 源,发现它跳过了 hasMany 序列化
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