0

我有一个grouped Checkbox,里面有 4 个checkboxes

当用户选择一个复选框时,我需要根据文本框的值过滤数据存储。当我选择 2 个文本框时,我得到 的输出["Albert","Francis"],当我只选择第一个文本框时,我得到["Albert"]等等。

现在,我需要知道如何过滤这个?

onCheckBoxGroupChange : function (field,newValue,oldValue,options) {
var chkv=newValue.chb;
console.log (chkv);
var st= Ext.getStore('People'); 
        st.on('load', function() {
           st.filter({
               filterFn: function(rec) {                   
                   return rec.get('name') == chkv; 

我遇到的问题是,当我同时选择CheckBoxes,时chkv变成["Albert","Francis"](像数组一样),因此我无法返回值,因为rec.get('name') == chkv;不查找数组。

有人能帮我吗?

4

1 回答 1

0

关于什么:

filterFn: function(rec) {
    return Ext.Array.contains(chkv, rec.get('name'));
}

我想确保你知道如果你想过滤它,你不必重新加载商店。看起来这就是您在上面提供的代码段中所做的。

实际上还有其他问题,您的onCheckBoxGroupChange处理程序实际上会做什么(如果您按照上面的方式保留它),如下所示:

每次用户单击复选框时,它都会首先从服务器重新加载商店,然后将选定的过滤器添加到商店的过滤器中,然后通过它保存的过滤器过滤商店。

例如:

用户点击“Albert”复选框

Store reloads 
Store adds `["Albert"]` filter function 
Store performs filtering with `["Albert"]` filter function

用户点击“Francis”复选框

Store reloads
Store adds `["Albert", "Francis"]` filter function
Store performs filtering with `["Albert"]` filter function
Store performs filtering with `["Albert", "Francis"]` filter function

用户取消点击“Albert”复选框

Store reloads
Store adds `["Francis"]` filter function
Store performs filtering with `["Albert"]` filter function
Store performs filtering with `["Albert", "Francis"]` filter function
Store performs filtering with `["Francis"]` filter function

您将逐渐获得越来越多的过滤器。加上不必要的多次重新加载商店。我不认为那是你想要的。

您应该查看有关数据存储过滤的文档,以获取有关如何进行此操作的更多数据。

另外,在您的问题中,您说当您选择两个复选框时遇到了这个问题,因为它返回了一个数组。根据您的问题文本,当您选择一个复选框 ( ["Albert"]) 时,您还会获得一个数组。它只有一个项目,但它是一个数组。

这就是为什么我的解决方案(要求你的chkv变量是一个数组)会起作用的原因。

于 2012-07-23T23:18:55.140 回答