Я знаю, что это немного поздно, но вы можете использовать это обходное решение, чтобы разрешить объекты с параметрами запроса. Довольно легко работать, и до сих пор у меня не было никаких проблем.
Я столкнулся с той же проблемой при создании приложения Ember поверх моего JSON API (http://jsonapi.org/).
Спецификация API JSON обеспечивает рекомендуемый синтаксис как для поискового вызова, так и для фильтрации, для которого требуются параметры запроса на основе объекта.
Для подкачки это предполагает синтаксис вроде этого:
/books?page[size]=100&page[number]=1
и для фильтрации его предложить синтаксис вроде этого:
/books?filter[author]=Bob
В то время как ember.js Запрос Params (как Эмбер v2.1) делают не поддерживайте это из коробки, довольно просто работать. В вашем контроллере вы должны сопоставить свойство контроллера с параметром «объект» запроса как строку.
Так, например, в приведенном выше примере «фильтр» вы должны сопоставить свойство контроллера с именем filterByAuthorValue
с параметром запроса filter[author]
.
код, чтобы сделать это будет выглядеть следующим образом:
export default Ember.Controller.extend({
queryParams: ['sort',{
filterByAuthorValue: 'filter[author]'
}],
sort: '',
filterByAuthorValue: ''
});
Примечание В приведенном выше примере я также есть запрос называется парам рода (который также соответствует рекомендациям API JSON, но не требует объекта). Для получения дополнительной информации о отображении свойства контроллера к парам запроса см этого раздел официального руководства ember.js:
http://guides.emberjs.com/v2.1.0/routing/query-params/#toc_map-a-controller-s-property-to-a-different-query-param-key
После того, как у вас есть запрос, созданные пары затем нужно обработать запрос param в вашем маршрутизаторе. Во-первых, маршрутизатор должен заставить модель должна быть обновлена, когда контроллер собственности filterByAuthor
изменения:
export default Ember.Route.extend({
queryParams: {
sort: {
refreshModel: true
},
filterByAuthor:{
refreshModel: true
}
}
});
Наконец, теперь нужно перевести свойство контроллера filterByAuthor
в реальный объект при загрузке модели в model
метод маршрутизатора и присвоить значение из свойства контроллера filterByAuthor
. Полный код маршрутизатора будет выглядеть как:
export default Ember.Route.extend({
queryParams: {
sort: {
refreshModel: true
},
filterByAuthor:{
refreshModel: true
}
},
model: function(params){
// The params value for filtering the entity name
if(params.filterByAuthor){
params.filter = {};
params.filter['author'] = params.filterByAuthor;
delete params.filterByAuthor;
}
return this.store.query('book', params);
},
});
настройки вещи, как это позволяет для объекта на основе запроса парам, которые будут использоваться с Эмбер и, таким образом, следовать рекомендациям JSON API.
Выше был протестирован со следующими версиями:
Ember : 2.1.0
Ember Data : 2.1.0
jQuery : 1.11.3