extjs中如何利用store中findBy来过滤数据

我做的东西大致如下:我利用过程从数据库查出一些数据,但是查出来的数据里面包含“全部”这样的字样,这些并不是我所想要的,我想在用户选择下拉框时不显示“全部”,这个功能可可以利用store的filterby函数实现,可能写的性能不是太好,供大家交流

一:定义store

var EasyOrderWiz_PHStore= new Ext.data.JsonStore({
     url:'qj/qqa.action',//这个是用java写的一个通用查询的action
     totalProperty: 'totalCount',
        root:'data',
         fields: [{name : 'PRODH',type : 'string'},{name : 'VTEXT',type : 'string'}],
        listeners:{
   scope:this,
   beforeload:function(sto, obj){
    var prodh=Ext.getCmp("EasyOrderWiz_VTEXT2").getValue();
    if(!prodh)
    {
      return;
    }
         sto.baseParams.proc = "SpqCodequery2";
          sto.baseParams.vkorg = gVKORG;
          sto.baseParams.prodh = prodh;
            },
      load:function(store,records){//在加载时添加过滤的方法就能达到预期的效果
                 store.filterBy(function(record,id){
                   if(record.get("PRODH")=="00")
                   {
                     return false;//这里的VTEXT=“全部”的PRODH值为00,就是说如果prodh的值为00就是全部,因此可以过滤掉,而findy()方法中,如果返回的值为false时,它的值不会写入到record
                   }
                   else
                   {
                    record.set("PRODH",record.get("PRODH"));
                     record.set("VTEXT",record.get("VTEXT"));
                     return true;
                   }
                 });
             }
    }

二:记住这点很重要,combox中的加载方式一定要用remote,并且需要store.reload(),如果用单单用local则会出现第一次点击下拉框时“全部”的字样还显示,第二次之后就会被过滤掉,这是因为打开下拉框时(mode:"local"),并不会每次都会去执行load方法,而是从缓存在取的数据。

{
         xtype : "label",
         text : "分类名称:"
        },{
           xtype:"combo",
         id:"EasyOrderWiz_PRODH1",
         name:"EasyOrderWiz_PRODH1",
         width:150,
         valueField:'PRODH',
         displayField:'VTEXT',
         triggerAction:"all",
         editable:false,     //不能编辑
         disabled:true,
                     mode: 'remote',
                     triggerAction: 'all',
                     store:EasyOrderWiz_PHStore,
                     listeners:
                   {
                    focus:{
                      scope:this,
                      fn:function(ifself)
                      {
                         EasyOrderWiz_PHStore.reload();//这里的reload很重要,不写的话就会出现第一次加载时过滤不掉的情况
                        if(Ext.getCmp("EasyOrderWiz_VTEXT2").getValue().trim().length==0){
                               Ext.Msg.alert("提示","请先选择品牌");
                               return false;
                            }
                      }
                 }
             }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值