Работа с приложением с Ember RC6 и Ember-Data v0.13-54 по пользовательскому серверу PHP API запутывает некоторые проблемы с отношениями моделей (в основном, много) и боковая нагрузка.Ember-Data, встроенные записи отношений и ответ сервера JSON
Модели в вопросах являются:
App.Member = DS.Model.extend({
apiToken: DS.attr('string'),
apiTokenExpire: DS.attr('string'),
favourites: DS.hasMany('App.Presentation')
});
App.Presentation = DS.Model.extend(
{
title: DS.attr('string'),
description: DS.attr('string'),
date: DS.attr('date'),
category: DS.belongsTo('App.Category'),
tags: DS.hasMany('App.Tag'),
employees: DS.hasMany('App.Member'),
presentation: DS.belongsTo('App.File'),
presenterNotes: DS.belongsTo('App.File'),
cover: DS.belongsTo('App.Image')
});
Чтобы получить RESTAdapater отправить отношения с Member
модели у меня есть:
App.APIRESTAdapter.map('App.Member', {
favourites: {embedded: 'always'}
});
При загрузке /members/1
возвращения сервера:
{
"member": {
"api_token": "9fa236ad58726584d7b61bcf94b4dda37cbd3a24",
"api_token_expire": "1383832335",
"id": 1,
"favourite_ids": [ 3 ],
"group_ids": [ 2 ]
},
"presentations": [
{
"title": "That's a new one!",
"category_id": 2,
"id": 3,
"tag_ids": [ 1 ],
"employee_ids": [ 1 ]
}
]
}
Но если я запишу get('member.favourites').mapProperty('id')
, я получаю emp и ни один из favourites
фактически не добавлен к модели Member
.
Если я отключу вставку favourites
на RESTAdapter, все работает нормально. Мне просто интересно, есть ли что-то, что мне не хватает, или если есть некоторые проблемы с тем, как отклик JSON отформатирован?
EDIT:
Совершено некоторое рытье и кажется, что проблема связана с тем, что имена соотношение (избранное, сотрудников) отличается от названия модели (член , Презентация), которые используются при загрузке данных. Странно, так как rev. 12 https://github.com/emberjs/data/blob/master/BREAKING_CHANGES.md Модели должны быть Sideload по типу.
Выполнение некоторых тестов я добавил новый много-ко-многим соотношение для этих 2 моделей:
App.Member
получает presentations: DS.hasMany('App.Presentation')
App.Presentation
получить members: DS.hasMany('App.Member')
JSON, возвращаемый сервером точно то же самое, и при регистрации get('member.presentations')
Теперь я получаю список презентаций, как должен.
На данный момент это похоже на ошибку, но, может быть, я что-то упустил? Я пробовал сопоставления на RESTAdapater
для избранных и сотрудников, но это не помогло ... Может быть, есть и другая конфигурация адаптера, которая могла бы помочь?