Javascript Combobox中的“全部搜索”选项

时间:2011-08-24 17:19:34

标签: javascript extjs combobox

我有一个ext.form.Combobox对象,由ext.data.JsonStore动态填充。用户可以键入搜索键以筛选列表,并选择其中一个筛选选项。我希望下拉菜单中的一个可点击选项为“全部”。如何使此选项始终显示在动态ComboBox列表中?它现在的设置方式,只有在用户开始在搜索字段中输入“a..l..l ..”时才会显示。

是否有可以申请的搜索字词是外卡,因此无论搜索字词是什么,它都会出现?

由于

3 个答案:

答案 0 :(得分:0)

我通常解决此问题的方法是将组合的emptyText配置选项设置为'All'。这样,当组合框根本没有设置值时(当它被提交到服务器时它也将提交一个空值),你可以假设用户不想在这个字段上进行过滤。 / p>

答案 1 :(得分:0)

查看一些Ext3源代码,获得所需功能的一种灵巧方法是覆盖filterBy上的Ext.data.Store函数,并截取该函数以允许“全部”记录通过:

Ext.ux.AllJsonStore = Ext.extend(Ext.data.JsonStore, {

    filterBy: function(fn, scope) {
        var allFn = Ext.util.Functions.createInterceptor(fn, function(record, id) {
            if (record.data.display == "All") {
                return true;
            }
        });
        return Ext.ux.AllJsonStore.superclass.filterBy.call(this, allFn, scope);
    }

});

然后,无论您在何处创建Ext.form.ComboBox商店,请改用此商店:

var combo = new Ext.form.ComboBox({
    ...
    store: new Ext.ux.AllJsonStore({...})
    ...
});

答案 2 :(得分:0)

我最终将beforeQuery属性设置为一个函数,该函数将“Search All”选项的搜索字符串值更改为当前查询。

像...这样的东西。

combobox.on('beforeQuery', function(q) {
  searchStore.getAt(searchStore.getCount()-1).data.search_string = q.query
}

这适用于我的代码,因为“全部搜索”选项是添加到搜索商店的最后一个选项。否则,您需要以另一种方式访问​​“搜索所有”记录。