`
pingfan
  • 浏览: 38890 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Ext.form.ComboBox调用store.filterBy失效问题

阅读更多


问题:
在ComboBox初始化后,调用combobox.getStore().filterBy()来过滤下拉框的数据,失效,

但当点击一次下拉框后,再调用过滤,一切正常..


解决办法:
设置combobox的lastQuery属性为''


 

分享到:
评论
4 楼 zhangbaocheng 2014-03-03  
非常感谢,解决了我的大问题了
3 楼 pingfan 2010-01-15  
我用的ext版本是ext.3.0.0
2 楼 pingfan 2010-01-15  
以下有一段测试代码,你看看效果.

        //用代码初始化,选择"国家3"
        this.countryCmb.setValue("3");
        this.filterBy("3");
        //1.先打开,点击stateCmb,可以看到已经正常过滤了.
        //2.把this.stateCmb的lastQuery=''注释掉,你再看看效果.发现this.stateCmb没有被过滤.
        //我说的就是这个问题.至于你的应用的问题,我不太清楚..


Ext.ns("com.quizzpot.tutorial");

com.quizzpot.tutorial.LinkedComboBoxTutorial = {
    init: function(){
        //code here
        Ext.data.Store.prototype.updateSnapshot = function() {
            this.snapshot = this.data
        }
        this.countryStore = new Ext.data.Store({
            reader: new Ext.data.JsonReader({
                fields: ['value','label']
            }),
            data:[{label:'国家1',value:'1'},{label:'国家2',value:'2'},{label:'国家3',value:'3'},{label:'国家4',value:'4'}]
        });     
        this.stateStore = new Ext.data.Store({
            reader: new Ext.data.JsonReader({
                fields: ['value','label','country']
            }),
            data:[
            	{label:'地区1A',value:'11',country:'1'},
            	{label:'地区1B',value:'12',country:'1'},
            	{label:'地区1C',value:'13',country:'1'},
            	{label:'地区2',value:'2',country:'2'},
            	{label:'地区3A',value:'31',country:'3'},
            	{label:'地区3B',value:'32',country:'3'},
                {label:'地区4',value:'4',country:'4'}
            ]
        });    
        this.countryCmb = new Ext.form.ComboBox({
            store: this.countryStore,
            editable: false,
            forceSelection: true,  
            selectOnFocus:true,
            blankText:'请选择',
            id: 'country',
            valueField: 'value',
            displayField: 'label',
            triggerAction: 'all',
            mode: 'local',          
            emptyText: '选择一个筛选项',
            fieldLabel: 'Country',
            lastQuery:''
          //applyTo: 'local-states'
        });

        this.stateCmb = new Ext.form.ComboBox({
            store: this.stateStore,
            forceSelection: true,  
            selectOnFocus:true,  
            id: 'state',
            valueField: 'value',
            displayField: 'label',
            triggerAction: 'all',
            mode: 'local',
            emptyText: 'Select a Contry first',
            fieldLabel: 'State'
            ,
            lastQuery:''
            //renderTo: document.body
            
        });
        
        this.window = new Ext.Window({
            title: 'Linked ComboBox',
            layout:'form',
            width:300,
            height:200,
            bodyStyle: 'padding:5px;background-color:#fff',
            items: [this.countryCmb,this.stateCmb]
        });
        this.window.show();
        this.filterBy = function(value){
        	this.stateCmb.getStore().filterBy(function(record,id){
                var countryId = record.get('country')+"";
                return value == countryId;
            },this);
        }
        
        this.countryCmb.on('select',function(cmb,record,index){
            var value = cmb.getValue()+"";
            this.filterBy(value);            
        },this);
        
        
        
        //用代码初始化,选择"国家3"
        this.countryCmb.setValue("3");
        this.filterBy("3");
        //1.先打开,点击stateCmb,可以看到已经正常过滤了.
        //2.把this.stateCmb的lastQuery=''注释掉,你再看看效果.发现this.stateCmb没有被过滤.
        //我说的就是这个问题.至于你的应用的问题,我不太清楚..
        
    }
}
Ext.onReady(com.quizzpot.tutorial.LinkedComboBoxTutorial.init,com.quizzpot.tutorial.LinkedComboBoxTutorial);
1 楼 falloutxxx2 2010-01-15  
last Query 在ext3下面没用?

Ext.ns("com.quizzpot.tutorial");

com.quizzpot.tutorial.LinkedComboBoxTutorial = {
	init: function(){
		//code here
Ext.data.Store.prototype.updateSnapshot = function() {
	    this.snapshot = this.data
	}
		this.countryStore = this.getStore();
		this.stateStore = this.getStore();
		this.countryCmb = new Ext.form.ComboBox({
			store: this.countryStore,
			editable: false,
			forceSelection: true,  
			selectOnFocus:true,
			blankText:'请选择',
			id: 'country',
			valueField: 'value',
			displayField: 'label',
			triggerAction: 'all',
			mode: 'local',			
			emptyText: '选择一个筛选项',
			fieldLabel: 'Country',
			lastQuery:'',
		  //applyTo: 'local-states'
		});

		this.stateCmb = new Ext.form.ComboBox({
			store: this.stateStore,
			disabled: true,
			forceSelection: true,  
			selectOnFocus:true,  
			id: 'state',
			valueField: 'value',
			displayField: 'label',
			triggerAction: 'all',
			mode: 'local',
			emptyText: 'Select a Contry first',
			fieldLabel: 'State',
			lastQuery:'',
			renderTo: document.body
			
		});
		

		this.window = new Ext.Window({
			title: 'Linked ComboBox',
			layout:'form',
			width:300,
			height:200,
			bodyStyle: 'padding:5px;background-color:#fff',
			items: [this.countryCmb,this.stateCmb]
		});
		this.window.show();

		this.stateCmb.on('beforequery',function(e){  
	         var combo = e.combo;  
	         if(!e.forceAll){  
	             var value = e.query;  
	             combo.store.filter(function(record,id){  
	             var text = record.get(combo.displayField);  
	                         //用自己的过滤规则,如写正则式  
	             return (text.indexOf(value)!=-1);  
	             });  
	             combo.expand();  
	             return false;  
	         }  
	     });
	    
		this.countryCmb.on('select',function(cmb,record,index){
			this.stateCmb.enable();
			this.stateCmb.clearValue();
			this.stateStore.load({params:{id:record.get('value')}});
		},this);
	},
	
	getStore: function(){
//		var store = new Ext.data.JsonStore({
//			url:'linked-cmb.php',
//			root:'data',
//			fields: ['value','label']
//		});
//
		
        var store = new Ext.data.Store({
            reader: new Ext.data.JsonReader({
            	fields: ['value','label'],
            	root:'data'
            }),
            proxy: new Ext.data.HttpProxy({
                url: 'linked-cmb.php'
            }),
            autoLoad: true
        });		
		return store;
	}
}

Ext.onReady(com.quizzpot.tutorial.LinkedComboBoxTutorial.init,com.quizzpot.tutorial.LinkedComboBoxTutorial);
/*
var combo = new Ext.form.ComboBox({
id:'somecombo',
store: combostore,
displayField:'state',
typeAhead: true,
width: 180,
mode: 'local',
//enableKeyEvents: true,
forceSelection: true,
triggerAction: 'all',
emptyText:'Select a state...',
selectOnFocus:true,
renderTo: document.body
});

combo.on('beforequery',function(e){
var combo = e.combo;
if(!e.forceAll){
	var value = e.query;
	combo.store.filterBy(function(record,id){
		var text = record.get(combo.displayField);
                //用自己的过滤规则,如写正则式
		return (text.indexOf(value)!=-1);
	});
	combo.expand();
	return false;
}
});
*/

相关推荐

    Ext.form.field.ComboBox结合Java、JSON实现AutoComplete

    本示例探讨如何利用Ext JS中的`Ext.form.field.ComboBox`组件,结合Java后端和JSON数据格式,来创建这样一个功能。 `Ext.form.field.ComboBox`是Ext JS框架中一个强大的组件,它提供了下拉列表的功能,可以用于创建...

    Ext.form表单中各种属性应用详解

    **Ext.form.ComboBox** 是一个下拉列表框组件,用于提供可选列表供用户选择。 - **allQuery**: 类型为 `String`,当用户在组合框中输入时,此属性定义所有匹配的项都将显示在列表中。 - **autoCreate**: 类型为 `...

    extjs-Ext.ux.form.LovCombo下拉框

    在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...

    EXT.form组件

    3. `combo`:`Ext.form.ComboBox`是下拉列表框组件,允许用户在预设的选项中进行选择,同时可以提供搜索功能以便快速定位选项。 4. `datefield`:`Ext.form.DateField`是日期选择组件,用户可以通过日历控件选择...

    EXT dojochina文本框示例Ext.form.TextField.rar

    8. **组合框模式**:`Ext.form.TextField`还可以扩展为`Ext.form.ComboBox`,实现下拉选择功能,这在需要用户从预定义选项中选择时非常有用。 在压缩包中的`Ext.form.TextField`文件夹,很可能是包含了一个或者多个...

    Ext.Store的获取方法

    在Ext.js中,`Ext.Store`是用来管理数据的类,它通常与各种UI组件(如Grid、ComboBox等)关联,用于存储和检索数据。然而,获取`Ext.Store`的方式并不像获取其他Ext组件那样直接,因为Store并不是一个具有可视界面的...

    Ext4.0 动态修改ComboBox选择项(本地模式)

    var comboBox = Ext.create('Ext.form.ComboBox', { fieldLabel: '选择项', store: ['选项1', '选项2', '选项3'], displayField: 'text', valueField: 'text', }); ``` 2. **添加或删除选项**: 当需要添加...

    Ext组合框comboBox带分页

    用EXT来实现下拉框ComboBox 下拉框可以实现分页

    ext多选下拉列表的全选功能实现

    "ext多选下拉列表的全选功能实现"这个主题聚焦于一个特定的UI组件——ExtJS库中的MultiComboBox,这是一种允许用户多选的下拉列表控件。在实际应用中,全选功能常常被用来快速选择所有选项,极大地提高了用户的操作...

    可编辑表格Ext.grid.EditorGridPanel

    Ext.grid.EditorGridPanel是Ext JS库中的一个组件,主要用于创建具有可编辑单元格的表格。这个组件在数据展示和编辑方面提供了丰富的功能,是构建数据密集型应用的理想选择。下面将详细阐述其特点、工作原理及如何...

    用Ext 2.0 combobox 做的省份和城市联动选择框的例程

    在本文中,我们将深入探讨如何使用Ext 2.0的ComboBox组件实现省份和城市联动选择框的功能。Ext是一个强大的JavaScript库,它提供了丰富的用户界面组件,包括ComboBox,用于创建下拉选择框。在这个例程中,我们将看到...

    EXT核心API详解

    53、Ext.form.DateField类 ………… 45 54、Ext.form.ComboBox类 ……………… 46 55、Ext.form.TimeField类 ………… 47 56、Ext.menu.Menu类 ………………… 50 57、Ext.menu.BaseItem类 …………… 50 58、Ext....

    extjs editgrid combobox 回显

    editor: new Ext.form.ComboBox({ id: "combo_process", store: store_process, valueField: "process_id", displayField: "process_name", forceSelection: true, typeAhead: true, triggerAction: 'all', ...

    解决ext下拉列表全选和去全选功能

    comboBox.setValue(comboBox.getStore().getValues()); } }); var deselectAllBtn = Ext.create('Ext.button.Button', { text: '全不选', handler: function() { comboBox.getStore().each(function(record) {...

    Ext组件描述,各个组件含义

    **2.18 ComboBox (Ext.form.ComboBox)** - **xtype**: `combo` - **功能描述**:ComboBox 是一个下拉列表框,用户可以从列表中选择一个值。 - **主要用途**:适用于需要用户从预定义的选项中选择的场景。 **2.19 ...

    EXT2_combobox_form.rar_combobox ext_ext

    EXT2_combobox_form.rar_combobox ext_ext 这个标题暗示我们关注的是一个与EXT2相关的项目,其中包含了关于form表单和combobox的示例。EXT是一个流行的JavaScript库,主要用于构建富客户端应用,特别是Web应用的用户...

    Extjs4.X下comboboxTree下拉树型菜单,完美支持多选、单选,绝对好用

    Ext.create('Ext.form.field.ComboBox', { fieldLabel: '选择部门', store: Ext.create('Ext.data.TreeStore', { model: 'Department', root: { text: '所有部门', expanded: true, children: [ /* ... *...

    Extjs3.4.0版本 多选下拉框效果支持多选/全选/全不选

    1. **创建一个新的类**:定义一个继承自Ext.form.ComboBox的新类,添加必要的配置和方法来支持多选。 2. **配置store**:设置一个数据存储(Store)来保存可选项,确保每个记录都有一个表示选中状态的字段,如`...

    Ext下拉树、下拉表格

    4. 将树转换为下拉菜单:使用Ext.form.field.ComboBox,配置其store为树数据模型,并设置displayField为显示的字段,valueField为选择项的标识字段。 下拉表格(ComboBox with Grid): 下拉表格组件则是下拉菜单...

    Ext combobox 下拉多选框带搜索功能

    在给定的标题“Ext ComboBox 下拉多选框带搜索功能”中,我们关注的是一个特别的ComboBox实现,它不仅允许用户从下拉列表中选择多个选项,还具备搜索功能,使得用户可以更高效地找到他们想要的选择项。 ComboBox在...

Global site tag (gtag.js) - Google Analytics