【发布时间】:2013-12-06 10:19:41
【问题描述】:
我目前正在处理简单的餐厅菜单,我从服务器收到以下 JSON:
[
{
"id": 251,
"name": "Borsch",
"category_id": 47,
"price": "135.0",
"photo": {
"origin": "/path/to/origin.png",
"resize": "/path/to/resize.png"
}
},
// A lot of other dishes
]
如您所见,我有一个photo,它是一个复杂的对象。在 emberjs.com 上,他们建议为此使用嵌入式模型。好的,到目前为止一切顺利,我决定创建以下模型:
App.Dish = DS.Model.extend({
name: DS.attr('string'),
price: DS.attr('number'),
category_id: DS.attr('number'),
photo: DS.belongsTo('photo')
});
App.Photo = DS.Model.extend({
origin: DS.attr('string'),
resize: DS.attr('string')
});
但即使我添加了此代码也不起作用
DS.RESTAdapter.map('App.Dish',{
photo: {
embedded:'always'
}
});
所以在那之后我用谷歌搜索了一下,然后this link 解释说他们不再支持嵌入式记录了。
经过一番思考,我决定将photo.origin 和photo.resize 带到 RESTSerializer 中 JSON 的顶层,现在我有了这个完全可用的模型:
App.Dish = DS.Model.extend({
name: DS.attr('string'),
price: DS.attr('number'),
category_id: DS.attr('number'),
photo_origin: DS.attr('string'),
photo_resize: DS.attr('string')
});
这与 RESTSerializer JSON 略有不同:
{
"dishes":
[
{
"id": 251,
"name": "Borsch",
"category_id": 47,
"price": "135.0",
"photo_origin": "/path/to/origin.png",
"photo_resize": "/path/to/resize.png"
}
},
// A lot of other dishes
]
}
现在我有几个问题。我的方法可以接受吗?如果不是,我需要如何处理带有嵌套对象的复杂 JSON?如果是的话,我该如何处理一些更复杂的带有深度嵌套(如五级)对象的 JSON?为什么 ember 停止支持嵌入式模型?
【问题讨论】:
标签: json ember.js ember-data