我正在使用Ember和Ember数据,我从服务器返回的JSON包含一个嵌入式对象数组。我得知道我做错了什么。我有一个JSBin,代码如下:
http://emberjs.jsbin.com/faledu/6/edit?html、js、输出
当前,我得到以下错误:
处理路由时出错:index Assertion Failed: Ember Data期望一个数字或字符串来表示
objects
关系中的记录,而不是找到一个对象。如果这是一个多态关系,请指定type
键。如果这是一个嵌入式关系,请在序列化器的attrs对象中包含DS.EmbeddedRecordsMixin
并指定objects
属性。错误:Assertion Failed: Ember Data期望一个数字或字符串来表示objects
关系中的记录,而不是找到一个对象。如果这是一个多态关系,请指定一个type
键。如果这是一个嵌入关系,请在序列化器的attrs对象中包含DS.EmbeddedRecordsMixin
并指定objects
属性。
我用的是DS。EmbeddedRecordsMixin在我的序列化器,但它似乎不工作。我如何使用JSON与烬数据?
您可以添加一个自定义的array
转换供ember-data使用,并且通过消除对EmbeddedRecordsMixin
等的需要大大简化您的代码。
这是我过去经常使用的数组转换:
App.ArrayTransform = DS.Transform.extend({
deserialize: function(serialized) {
return (Ember.typeOf(serialized) === 'array') ? serialized : [];
},
serialize: function(deserialized) {
var type = Ember.typeOf(deserialized);
if (type === 'array') {
return deserialized;
} else if (type === 'string') {
return deserialized.split(',').map(function(item) {
return item.trim();
});
} else {
return [];
}
}
});
但是,我要说的是,当涉及到结构时,您应该真正避免与ember-data作斗争。我曾尝试强行使用边缘情况,结果做了很多不必要的工作。如果你不能修改你的API使其更"JSON API"友好,我会考虑寻找其他替代方法来替代ember-data,或者考虑使用纯AJAX来处理类似于Discourse方法的事情。在一天结束时,我只是试图确保您的API工作在侧加载风格或使用async
方法的两个单独的请求。你的生活会轻松很多。
"design": {
"id": "1",
"name": "test1",
"description": "testing",
"objects": [1, 2]
},
"objects": [
{
"id": 1,
"name": "foo"
},
{
"id": 2,
"name": "bar"
}
]
这是一篇旧的博客文章,但如果您的用例需要在ember-data快乐路径之外操作,则主要概念仍然适用- http://eviltrout.com/2013/03/23/ember-without-data.html