2015-08-02 3 views
0

Мне было интересно, если это возможно, чтобы создать преобразование для belongsTo (и продлить hasMany), как мой REST сервер возвращает отношения, которые определяются следующим образом:Transform для BelongsTo

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    lastname: DS.attr('string'), 
    firstname: DS.attr('string'), 
    company: DS.belongsTo('company'), 
}); 

этот путь:

[ 
    { 
     "firstname": "John", 
     "lastname": "Doe", 
     "company": { 
      "uri": "<snip>/api/rest/company/5", 
      "id": "5", 
      "resource": "company" 
     } 
    } 
] 

в то время как реализация по умолчанию для RESTAdapter ожидает ответа сервера, как это:

[ 
    { 
     "firstname": "John", 
     "lastname": "Doe", 
     "company": "5" 
    } 
] 
+0

Возможно, вы сможете использовать [EmbeddedRecordsMixin] (http://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html) – dwickern

+0

Это не встроенные данные, а только идентификатор в объекте. а не просто id – pjcarly

ответ

2

С Ember данных 1.13, при условии, что вы выборки одной модели, вы бы переопределить normalizeFindRecordResponse в прикладном сериализатором:

// serializers/application.js 
normalizeFindRecordResponse: function(store, primaryModelClass, payload) { 

    var record = { id: payload.id, type: primaryModelClass.modelName }; 
    record.relationships = {}; 

    Object.keys(payload).forEach(function(key) { 
    if (payload[key].id) { // it's an object with an id -> relationship 
     record.relationships[key] = { data: { id: payload[key].id, type: key } }; 
    } else { // it's an attribute 
     record.attributes[key] = payload[key]; 
    } 
    }) 

    return { data: record }; 

} 

Это путь вперед для Ember данных 2.0: массировать данные сервера входящих сообщений, чтобы соответствовать JSON API ,

+0

Хорошо, но таким образом я должен вручную исправить все мои отношения (в этом примере у меня есть только один, но их еще много), проблема в том, что мой отдых api одинаково отвечает всем отношениям, Я хотел бы сделать это в общем виде, для каждого отношения BelongsTo. – pjcarly

+0

Сделать это сериализатором приложений и использовать аргументы, предоставляемые для его генерации? – emberigniter

+0

Я обновил ответ, чтобы сделать его общим. – emberigniter