2016-01-18 2 views
3

Я разрабатываю приложение Ember с бэкэндом Rails, используя отличный камень JSONAPI::Resources, чтобы разоблачить мои данные.Как загружать записи {json: api} с данными Ember Data 2 и JSONAPI :: Ресурсы в Rails?

Я хотел бы получить записи из моего бэкэнд, используя store.findRecord, store.query и т. Д., Одновременно загружая определенные отношения. JSONAPI :: Ресурсы supportsthis part of the spec, но я не могу понять, как сделать данные Ember, включая параметр ?include=... в URL-адресе запроса.

Как я могу проинструктировать Ember Data (2.2.0), чтобы попросить бэкэнд включить отношения при извлечении ресурсов?

ответ

7

Если вы в состоянии, можете попробовать бета-версию Ember Data 2.4, которая включает флаг функции ds-finder-include.

Этот признак функции позволяет передавать хэш-параметры с ключом includes.

Чтобы узнать, как включить флажки функций, проверьте guide.

+0

Похоже, что это разрешено только для 'findRecord' и' findAll' - bummer, потому что я использую 'query' для фильтрации определенных значений. Я считаю, что он не включен в 'query', потому что' query' настолько низкоуровневый - это он? Есть ли какое-либо обходное решение, которое вы рекомендуете? –

+1

Запрос - это запрос, вы можете передать все, что хотите, в том числе 'includes'! – locks

4

Способ, которым я справляюсь с этим, заключается в изменении моего адаптера приложения для процесса включает, а затем pass включает в качестве параметров моего адаптера в моем запросе. Прямо сейчас я обрабатываю только один элемент include, но не слишком сложно обрабатывать массив.

приложение/адаптеры/application.js

import DS from 'ember-data'; 

export default DS.JSONAPIAdapter.extend({ 

    urlForFindRecord(query, modelName, snapshot) { 
    var url = this._super(...arguments); 

    return this._processIncludes(url, snapshot); 
    }, 

    urlForFindAll(query, modelName, snapshot) { 
    var url = this._super(...arguments); 

    return this._processIncludes(url, snapshot); 
    }, 

    _processIncludes(url, snapshot) { 
    var options = snapshot && snapshot.adapterOptions; 

    if (options && options.include) { 
     url = `${url}?include=${options.include}`; 
    } 

    return url; 
    }, 


}); 

А потом, в моем пути модели крючком, я просто добавить свои варианты адаптеров.