我正在使用Ember和Ember Data,我从服务器返回的JSON包含一个嵌入式对象数组。我需要知道我做错了什么。我有一个JSBin,代码如下:
http://emberjs.jsbin.com/faledu/6/edit?html,js,output
目前,我收到以下错误:
处理路径时出错:索引断言失败:Ember数据需要一个数字或字符串来表示
objects
关系中的记录,而不是找到一个对象。如果这是多态关系,请指定type
密钥。如果这是嵌入式关系,请包含DS.EmbeddedRecordsMixin
并在序列化程序的attrs对象中指定objects
属性。错误:断言失败:Ember数据需要一个数字或字符串来表示objects
关系中的记录,而不是找到一个对象。如果这是多态关系,请指定type
密钥。如果这是嵌入式关系,请包含DS.EmbeddedRecordsMixin
并在序列化程序的attrs对象中指定objects
属性。
我在我的序列化程序中使用DS.EmbeddedRecordsMixin,但它似乎不起作用。如何将该JSON与Ember Data一起使用?
答案 0 :(得分:0)
您可以为要使用的ember-data添加自定义array
转换,并通过消除对EmbeddedRecordsMixin
等的需求来大大简化您的代码。
http://emberjs.jsbin.com/warebi/1/edit
以下是我过去经常使用的数组转换:
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 [];
}
}
});
但是,我会说你应该真正避免在结构方面与格斗数据作斗争。我试图强迫边缘情况,最终做了比需要更多的工作。如果您无法修改您的API,那就更多地使用JSON API'友好,我考虑考虑其他替代ember数据或考虑使用普通的AJAX来处理类似于Discourse方法的事情。在一天结束时,我只是尝试使用async
方法确保您的API在侧载样式或两个单独的请求中工作。你的生活会更容易。
"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