在Ember Route中查询参数

时间:2013-08-05 20:35:57

标签: ember.js ember-router

有没有办法在ember路由中使用查询参数。在我的应用程序中有一个产品搜索路径,用户在其中搜索带有输入字段的产品。当用户导航到找到的产品之一然后点击后退按钮时,之前的搜索消失,因为路线的网址为products。那么有没有办法将用户所做的查询存储到products?search=shirts之类的路径中,以便在用户返回此页面时显示上一个结果?

1 个答案:

答案 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属性,因此当您从路由转换到路由时,搜索字词不会丢失。这样做的问题是除非你明确地去清理那个属性,否则搜索术语不会被删除(你可以在技术上对你手动删除该字段/绑定值的特定场景进行一些逻辑/检查);