有没有办法在ember路由中使用查询参数。在我的应用程序中有一个产品搜索路径,用户在其中搜索带有输入字段的产品。当用户导航到找到的产品之一然后点击后退按钮时,之前的搜索消失,因为路线的网址为products
。那么有没有办法将用户所做的查询存储到products?search=shirts
之类的路径中,以便在用户返回此页面时显示上一个结果?
答案 0 :(得分:0)
除非我误解了你想要什么,或者除非我因为商业要求而不得不这样做,否则我不会为特定搜索类别创建路由,而是创建一个计算属性(或带有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
属性,因此当您从路由转换到路由时,搜索字词不会丢失。这样做的问题是除非你明确地去清理那个属性,否则搜索术语不会被删除(你可以在技术上对你手动删除该字段/绑定值的特定场景进行一些逻辑/检查);