2016-10-13 5 views
0

У меня есть бэкэнд, который следует спецификациям API JSON.Как я могу запросить отношения ресурса без использования фильтра?

В моем приложении Ember, я что-то вроде этого:

model() { 
    return this.store.query('category', { filter: { forum: 'main' } }); 
} 

Это хорошо работает, и запрос отправляется на сервер GET /categories?filter[forum]=main. Мое приложение получает все категории с форума с ID main.

Теперь, вместо предыдущего запроса, я хотел бы сделать модель GET /forums/main/categories. Как это можно сделать в Ember с данными Ember?

Вот то, что я пытался с Ember AJAX:

ajax: Ember.inject.service(), 

model() { 
    return Ember.RSVP.hash({ 
    categories: this.get('ajax').request('/forums/main/categories'), 
    }); 
} 

Запросом работа и правильные данные возвращаются с сервера. Но Ember Data просто не знает об этом, и я не могу использовать модель в своем шаблоне. Как я могу заставить Ember AJAX работать с Ember Data?

Тлеющей AJAX GitHub страница предлагает написать что-то вроде этого:

import DS from 'ember-data'; 
import AjaxServiceSupport from 'ember-ajax/mixins/ajax-support'; 

export default DS.JSONAPIAdapter.extend(AjaxServiceSupport); 

https://github.com/ember-cli/ember-ajax#usage-with-ember-data

Но это, похоже, не изменится ничего.

+0

вы можете создать модель специальный адаптер и настроить 'namespace' свойства' форумы/main' – kumkanillam

+1

'main' является идентификатором. Это не сработает. –

ответ

1

ОК, /forums/main/categories выглядит немного как ссылка для отношений. Например, forum также является моделью и имеет категории отношений. Это правильно?

Если да, возможно, самое лучшее - сначала получить forum, а затем отношения. Возможно, у вас уже есть запись forum? Так что-то вроде этого:

store.findRecord('forum', 'main').then(forum => forum.get('categories')); 

Однако, если вы хотите, чтобы фильтровать categories основанный на шнурке форуме, это также возможно. Так что в основном вы хотите сделать это:

this.store.query('category', { filter: { forum: 'main' } }); 

Но он должен запросить /forums/main/categories вместо /categories?filter[forum]=main. Это можно сделать с помощью адаптера. Возможно, вы просто должны переопределить urlForQuery:

urlForQuery(query, modelName) { 
    if(query.filter.forum) 
    const forum = query.filter.forum; 
    delete query.filter.forum; 
    return `/forums/${forum}/categories` 
    } else { 
    return this._super(...arguments); 
    } 
}, 
+0

Я ищу что-то вроде 'store.findRecord ('forum', 'main'). Then (forum => forum.get ('categories'));'. Я попробовал, но, к сожалению, это не работает. Это делает только «GET/forums/main». –

+0

делает '/ forums/main' ответ с правильным ответом JSONAPI и объектом' links' в отношении? – Lux

+0

Да. Когда я пытаюсь использовать 'forum.categories' в шаблоне, он автоматически создает' GET/forum/main/categories', но это не удобно. Я не могу применить фильтр, сортировать данные и т. Д. Поэтому я хочу, чтобы запрос произошел на маршруте, где я больше контролирую его. –

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

  • Нет связанных вопросов^_^