序列化异步有很多关系

时间:2014-02-23 23:43:42

标签: ember.js ember-data active-model-serializers

我对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

1 个答案:

答案 0 :(得分:1)

根据我的理解,活动模型序列化程序跳过的原因有许多关系,它希望后端处理它。在关系数据库中,有许多的值未明确保存在父记录中。将外键保存在子项中就足够了。当您要求更清洁的解决方案时 - 或许ActiveModelSerializer不适合您的API。