Ember数据:允许嵌入ID用于记录

时间:2014-09-27 22:31:33

标签: javascript ember.js ember-data ember-cli

使用RESTAdapter时,我有一个Organization模型,该模型将嵌入到响应中。 Ember.RESTAddapter的默认实现似乎使用相同的模型名称发送id,但不是作为对象发送(目前这'工作'):

  

POST / PUT api / v1 / item / {id}

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

我查阅了文档,发现mixin DS.EmbeddedRecordsMixin应该执行此操作,并在embedded: "always"attrs上声明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"}
        }
    }
);

然而,当反序​​列化记录时,Ember Data抱怨说它预期有一个对象,但只是得到了一个字符串:

  

断言失败:在推送的调用中预期对象为data   app @ model:organization:,但是是26044097612186763401268824297

最终,我更喜欢一个系统,比如 sideloading ,其中一个附加属性,post-fixed" _id",描述了嵌入式的相应id记录:

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

如何为id模型允许序列化和反序列化嵌入式Organization边加载?

1 个答案:

答案 0 :(得分:1)

你实际上并没有嵌入记录,你只是指定了id,在这种情况下你应该把它标记为异步。

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

删除嵌入式记录实施。