я работаю с простым меню ресторана на данный момент, и я получаю следующее JSON от сервера:Встроенные модели в Ember данных 1.0.0-beta.2
[
{
"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
на верхний уровень JSON внутри RESTSerializer и теперь у меня есть это полностью рабочая модель:
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. – DaZzz
@DaZzz Отлично! Не забудьте принять ответ, если он ответил на ваш вопрос. – MartinElvar