有一个select组件,和一个list组件。打开页面时,list显示所有数据,当select的change事件触发时,list中的数据随着所选条件改变,怎么实现?

解决方案 »

  1.   

    代码如下:Ext.setup({
    onReady:function(){
    Ext.regModel('Contact',{
    fields:['gender','name','age']
    });

    var data = [{gender:'男',name:'张三',age:22},
      {gender:'女',name:'李丽',age:24},
      {gender:'男',name:'李四',age:21},
      {gender:'男',name:'王五',age:25},
      {gender:'男',name:'赵六',age:23}]; var store =new  Ext.data.JsonStore({
    model:'Contact',
    data:data
    });
    var list = new Ext.List({
    store:store,
    itemTpl:'姓名:{name}  性别:{gender}  年龄:{age}',
    id:'list1'
    });
    var pnl = new Ext.Panel({
    fullscreen:true,
    dockedItems:[{
    xtype:'toolbar',
    items:[{
    xtype:'selectfield',
    name:'selGender',
    options:[{
    text:'性别',value:''
    },{
    text:'男',value:'男'
    },{
    text:'女',value:'女'
    }],
    listeners:{
    change:function(item,value){
    var list1 = Ext.getCmp('list1');
    store.filter('gender',value);
    list1.store=store;
    list1.refresh();
    }
    }
    }]
    }],
    items:[list]
    });
    }
    });
    store第一次过滤数据后,第二就拿不到完整的data了,而是第一次过滤的结果.有没有办法让它每次都是从完整的数据中进行过滤?
      

  2.   

    嗯,得到想要的效果了^_^.
    Ext.setup({
    onReady:function(){
    Ext.regModel('Contact',{
    fields:['gender','name','age']
    });

    var data = [{gender:'男',name:'张三',age:22},
      {gender:'女',name:'李丽',age:24},
      {gender:'男',name:'李四',age:21},
      {gender:'男',name:'王五',age:25},
      {gender:'男',name:'赵六',age:23}]; var store =new  Ext.data.JsonStore({
    model:'Contact',
    data:data
    }); var list = new Ext.List({
    store:store,
    itemTpl:'姓名:{name}  性别:{gender}  年龄:{age}',
    id:'list1'
    });
    var pnl = new Ext.Panel({
    fullscreen:true,
    dockedItems:[{
    xtype:'toolbar',
    items:[{
    xtype:'selectfield',
    name:'selGender',
    options:[{
    text:'性别',value:''
    },{
    text:'男',value:'男'
    },{
    text:'女',value:'女'
    }],
    listeners:{
    change:function(item,value){
    var list1 = Ext.getCmp('list1');
    store.filterBy(function(record) {   
    return record.get('gender') ==value;   
    });  

    list1.store=store;
    list1.refresh();
    }
    }
    }]
    }],
    items:[list]
    });
    }
    });