Serialization 余烬数据:反序列化嵌入式模型

Serialization 余烬数据:反序列化嵌入式模型,serialization,ember.js,Serialization,Ember.js,我真的不明白 我有以下代码: App.Instance = DS.Model.extend({ hash: DS.attr('string'), users: DS.hasMany('user', { embedded: 'always' }) }); App.User = DS.Model.extend({ name: DS.attr('string'), color: DS.attr('string'), lat: DS.attr('number'), lng: D

我真的不明白

我有以下代码:

App.Instance = DS.Model.extend({
  hash: DS.attr('string'),
  users: DS.hasMany('user', { embedded: 'always' })
});

App.User = DS.Model.extend({
  name: DS.attr('string'),
  color: DS.attr('string'),
  lat: DS.attr('number'),
  lng: DS.attr('number'),
  instance: DS.belongsTo('instance')
});

App.InstanceSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
  attrs: {
    users: { embedded: 'always' }
  }
});
例如:

var instance = {
  hash: "68309966ec7fbaac",
  id: "54b4518fcbe12d5160771ebe",
  users: [{
    color: "#9E463C",
    id: "78b662bc56169a96",
    lat: 36.5299487,
    lng: -6.2921774,
    name: "User 1"
  },{
    color: "#9E463C",
    id: "78b662bc56169a96",
    lat: 36.5299487,
    lng: -6.2921774,
    name: "User 2"
  }]
}
但是当我想
store.push('instance',instance)时,我收到:

未捕获错误:断言失败:余烬数据需要一个数字或字符串来表示
users
关系中的记录,但它找到了一个对象。如果这是多态关系,请指定
类型
键。如果这是嵌入关系,请包括
DS.EmbeddedRecordsMixin
,并在序列化程序的属性中指定
users
属性

错在哪里

阅读所有这些来源,它们总是使用不同的策略:

非常感谢

这篇文章:ember希望像这样侧载您的数据:

var data = {
  instance: {
    hash: "68309966ec7fbaac",
    id: "54b4518fcbe12d5160771ebe",
    users: ["78b662bc56169a96", "78b662bc56169a97"]
  },
  users: [{
    color: "#9E463C",
    id: "78b662bc56169a96",
    lat: 36.5299487,
    lng: -6.2921774,
    name: "User 1"
  },{
    color: "#9E463C",
    id: "78b662bc56169a96",
    lat: 36.5299487,
    lng: -6.2921774,
    name: "User 2"
  }]
}
在这里很容易做到:

for (var i=0; i < data.users.length; i++) {
  store.push('user', data.users[i]);
}
store.push('instance', data.instance);
for(var i=0;i
在序列化的文件夹内创建序列化。serialize的名称与您的模型相同

import DS from 'ember-data';

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
    hasEmbeddedAlwaysOption: function(attr) {
        var option = this.attrsOption(attr);

        if (typeof(option) === 'undefined') {
            return true;
        } else if (option.embedded === false) {
            return false;
        }

        return this._super.apply(this, arguments);
    },

    noSerializeOptionSpecified: function(attr) {
        var option = this.attrsOption(attr);

        if (typeof(option) === 'undefined') {
            return false;
        } else if (option.embedded === false && !!option.serialize) {
            return true;
        }

        return this._super.apply(this, arguments);
    }
});

当对象中有对象时,会发生这种情况。如果您不想为对象中包含对象的每个模型创建这样的类,请将此代码复制到application.js inside serializers文件夹中。

您的实例对象中有错误。查看id字符串和缺少的逗号。此外,在实例和用户上指定id可能会弄乱存储。尝试将这些id更改为表示该id实际是什么的新属性。感谢您的回复。实例错误是从控制台复制的打字错误。我尝试从用户中删除id,但没有帮助。如果我从实例中删除id,我会得到
未捕获错误:断言失败:您必须在传递给push的对象中包含实例的id
。我们知道如何侧装。OP的问题是为什么嵌入失败,即使在序列化程序中正确指定了嵌入选项。