我做的东西大致如下:我利用过程从数据库查出一些数据,但是查出来的数据里面包含“全部”这样的字样,这些并不是我所想要的,我想在用户选择下拉框时不显示“全部”,这个功能可可以利用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;
}
}
}
}
}