2014-09-27 46 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

相关问题