我有一个grouped Checkbox
,其中有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"]
(就像数组一样),因此我无法返回{{1不寻找数组。
有人可以帮助我吗?
答案 0 :(得分:0)
怎么样:
filterFn: function(rec) {
return Ext.Array.contains(chkv, rec.get('name'));
}
我想确保您知道如果要过滤商店,则无需重新加载商店。看起来这就是您在上面提供的代码段中所做的事情。
实际上还有其他问题,你的onCheckBoxGroupChange
处理程序实际上会做什么(如果你按照上面的方式保留它),如下:
每次用户点击复选框时,它都会首先从服务器重新加载商店,然后将选定的过滤器添加到商店的过滤器中,然后按照已保存的过滤器过滤商店。
E.g:
用户点击“Albert”复选框
Store reloads
Store adds `["Albert"]` filter function
Store performs filtering with `["Albert"]` filter function
用户点击“弗朗西斯”复选框
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
您只需逐渐获得越来越多的过滤器。加上不必要地重新加载商店多次。我认为这不是你想要的。
您应该查看datastore filtering上的文档,了解有关如何解决此问题的更多数据。
此外,在您的问题中,您说当您选择两个复选框时遇到此问题,因为它返回了一个数组。根据您的问题文本,当您选择一个复选框(["Albert"]
)时,您也会获得一个数组。它只有一个项目,但它是一个数组。
这就是为什么我的解决方案(需要你的chkv
变量是一个数组)才能工作。