2014-09-27 44 views
1

使用RESTAdapter時,我有一個要嵌入到響應中的Organization模型。看來,Ember.RESTAddapter的默認實現發送id,使用相同的型號名稱,但不是作爲一個對象(這個目前「作品」):Ember Data:允許嵌入ID進行記錄

POST/PUT API/V1 /項目/ {ID}

{ 
    "item" { 
     id: "1029383829" 
     ... 
     organization: "26044097612186763401268824297" 
    } 
} 

我已徵詢文件,並發現混入DS.EmbeddedRecordsMixin要做到這一點,再加上attrs宣佈embedded: "always"Serializer

型號/ item.js

var Item = DS.Model.extend({ 
    ..., 
    organization: DS.belongsTo("organization", {embedded: "always"}) 
}); 

串行器/ item.js

var ItemSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
     attrs: { 
      organisation: {serialize: "id", embedded: "always"} 
     } 
    } 
); 

但是,反序列化記錄時,灰燼數據抱怨,說,它預計的對象,只是得到了一個字符串:

聲明失敗:期望一個對象爲data在cal升推動 應用@模型:組織:,但26044097612186763401268824297

最終,我寧願的系統中,比作側面加載,其中附加的屬性,後固定「_id」,描述相應的嵌入式記錄id

{ 
    "item": { 
     id: 1, 
     name: "name", 
     organization_id: "26044097612186763401268824297" 
     ... 
    } 
} 

我怎麼才能讓序列化和反序列化嵌入式id側載我Organization模式?

+0

您不需要在'attrs.organisation'上指定'setialize:'id'',因爲它是序列化程序的默認值。 – 2014-12-05 20:35:11

回答

1

你實際上並沒有嵌入記錄,你只是指定了id,在這種情況下,你應該將它標記爲異步。

var Item = DS.Model.extend({ 
    ..., 
    organization: DS.belongsTo("organization", {async: true}) 
}); 

並刪除您的嵌入記錄實施。

+0

''async:true''防止發生錯誤,但是當包含''id'或者對象本身時,'POST''和''UPDATE''請求不會明確指定獲得''organization_id'')。有沒有辦法做到這一點? – user1429980 2014-09-27 22:59:49

相關問題