2014-12-23 2 views
0

Я пытаюсь сериализовать пользовательский объект и передать его клиенту ember. В моем приложении используется REST-сериализатор.Введенные данные Ember имеют одно отношение для ember-data.1.0.0

Пользовательский объект has_one адресный объект. Нет отдельной конечной точки только для адреса, поэтому я не могу просто указать идентификатор внешнего ключа и отключить его.

JSON получил только включает в себя адрес, как объект и выглядит примерно так:

{"user": 
    { 
    "id":"5", 
    "name":"Andrew", 
    "address": 
     { 
     "id":"3", 
     "addressable_id":"5", 
     "street":"1", 
     "country_code":"US" 
     } 
    } 

На стороне Ember У меня есть модель пользователя

App.User = DS.Model.extend({ 
    name: DS.attr('string'), 

    address: DS.belongsTo('address'), 

    //hasOne via belongsTo as suggested by another SO post: 
    //http://stackoverflow.com/questions/14686253/how-to-have-hasone-relation-with-embedded-always-relation 
}); 

и модель адресной

App.Address = DS.Model.extend({ 
    addressable_id: DS.attr('string'), 
    street: DS.attr('string'), 
    country_code: DS.attr('string'), 

    user: DS.belongsTo('user') 
}); 

В данный момент данный код вызывает ошибку на консоли:

TypeError: Cannot read property 'typeKey' of undefined 

, которая может быть исправлена ​​путем удаления линии

address: DS.belongsTo('address'), 

в пользовательской модели, но тогда отношения не загружается должным образом.

Так что я делаю неправильно, настраивая это? Я получаю много времени, чтобы найти последнюю документацию по этому вопросу.

+0

Вы используете [встроенный микшинг записи] (http://stackoverflow.com/questions/24222457/ember-data-embedded-records-current-state/24224682#24224682)? – vhf

+0

На самом деле, похоже, я неправильно истолковал ссылку, которую вы отправили. Это может решить мою проблему. – Andrew

+0

Это сработало! Если вы повторно представите это в качестве ответа в каком-то контексте, я соглашусь с ним. Спасибо огромное! Я боролся с этим часами. – Andrew

ответ

1

Вам необходимо использовать DS.EmbeddedRecordsMixin для сериализатора на каждый тип.

В вашем случае, вам нужно будет сделать следующее:

App.UserSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    address: {embedded: 'always'} 
    } 
}); 

, как описано в this excellent answer.