2013-07-05 2 views
2

Работа с приложением с 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 для избранных и сотрудников, но это не помогло ... Может быть, есть и другая конфигурация адаптера, которая могла бы помочь?

ответ

1

Это не проблема sideloading но более недопонимание с моей стороны о встроенных данных и что конфигурация означает. Поскольку адаптер был сконфигурирован с:

App.APIRESTAdapter.map('App.Member', { 
    favourites: {embedded: 'always'} 
}); 

Ожидаемый JSON ответ от сервера:

{ 
    "member": { 
    "api_token": "b84fd204b37d3fa3cee8a2b2cac8bd4fd02635a1", 
    "api_token_expire": "1384027367", 
    "id": 1, 
    "favourites": [ 
     { 
     "title": "Some kind of title", 
     "category_id": 1, 
     "id": 2, 
     "tag_ids": [ 1 , 2 ], 
     "employee_ids": [ 1 ] 
     } 
    ] 
    } 
} 

Так "favourite_ids": [ X, X, X ] должны были "favourites": [ HASH, HASH, HASH ], когда записи помечены как встроенные.

Смежные вопросы