2014-02-23 15 views
5

我對EmberJS相當陌生,在大部分時間裏,我一直在擺弄大部分時間,試圖在我正在開發的新應用程序中堅持一些hasMany和多對多關係。序列化異步擁有許多關係

我使用灰燼數據與ActiveModelAdapter把它掛到我的軌道末端,它是利用ActiveModelSerializers

我使用的餘燼和我使用灰燼下面的數據版本。

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,並發現它跳過的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 
+1

使用你的解決方案,工作正常,我只是刪除relationship.options.async,這不是我的情況。也許是時候在ember-data github中打開一個問題了? –

回答

1

在我的理解中,活動模型序列化器跳過的原因有很多關係,它期望後端處理它。在關係數據庫中,a的值有很多不顯式保存在父記錄上。將外鍵保存在孩子中就足夠了。當你要求更清潔的解決方案時 - 或許ActiveModelSerializer不適合你的API。

+0

你說得很好。那麼你如何在這種情況下觸發拯救孩子(在AMS中使用Ember和JSONAPI)? – rmcsharry

+0

你能回答這個嗎? http://stackoverflow.com/questions/39506375/emberjs-2-7-has-many-configuration-for-ember-data-and-active-model-serializers – rmcsharry