3

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

4

1 回答 1

0

除非我误解了您想要的内容,或者除非我因为 biz 要求而必须这样做,否则我不会为特定搜索类别创建路由,而是会创建一个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属性,所以当你从一个路由转换到另一个路由时,搜索词不会丢失。这样做的问题是,除非您明确地去清理该属性,否则搜索词不会被删除(从技术上讲,您可以对手动删除该字段/绑定的值的特定场景进行一些逻辑/检查);

于 2013-08-06T21:54:54.083 回答