Параметр запроса в Ember Route
Есть ли способ иметь параметр запроса в раскаленных маршрутах. В моем приложении есть маршрут поиска товаров, где пользователь ищет товары с помощью поля ввода. Когда пользователь переходит к одному из найденных продуктов, а затем нажимает кнопку "Назад", предыдущий поиск исчезает, поскольку URL-адрес маршрута products
, Так есть ли способ сохранить запрос, который пользователь делает в маршрут, как products?search=shirts
поэтому предыдущий результат будет отображаться, когда пользователь вернется на эту страницу?
2 ответа
Если я не понял, что вы хотите, или если мне не нужно из-за требований бизнеса, я бы не стал создавать маршрут для определенной категории поиска, вместо этого я бы создал вычисляемое свойство (или функцию с observe
), который фильтруется поиском keyworkd (как свойство моего контроллера). Что-то вроде следующего:
App.SomeController = Em.ArrayController.extend({
searchKeyword: '',
filteredSearchResults: function() {
var keyword = this.get('searchKeyword');
if(keyword.length > 0) {
// filtered search
return this.get('content').filter(function(item) {
// do your own filtering logic here
return item.get('name').indexOf(keyword) !== -1
});
} else {
// unfiltered search
return this.get('content');
}
}.property('content', 'searchKeyword');
});
Тогда в Handlebars я бы повторил что-то вроде этого
{{#each filteredSearchResults}}
... do stuff here...
{{/each}}
Текстовое поле поиска должно быть привязано к контроллеру searchKeyword
свойство, поэтому поисковый термин не теряется при переходе от маршрута к маршруту. Проблема в том, что поисковый термин не будет удален, если вы явно не пойдете и не очистите это свойство (технически вы можете иметь некоторые логические элементы / проверки для конкретных сценариев, в которых вы вручную удаляете значение этого поля / привязки);
Параметры запросов теперь поддерживаются Ember.