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的问题是为什么嵌入失败,即使在序列化程序中正确指定了嵌入选项。