0

我有一个组合框,其中项目来自数据库,并且使用该组合框应用了过滤器选项...组合第一次效果很好,但问题是当我第二次想从组合框中选择项目时我不在我的组合中查找项目(仅之前选择的项目)..

this.control({
                    'combobox[itemId=YourCombo]':
                    {
                    select: this.combogridfilter
                    }
                    });       

combogridfilter: function(newValue){
    var value1= Ext.getCmp('myCombo').getValue();
        var grid=Ext.getCmp('afteraddingtemplate');
            grid.store.load().filter([
                {id:'item_code', property:"item_code", value: value1, anyMatch: false}
            ]);

    },

这是组合配置

xtype:'combo',
            id:'myCombo',
            itemId:'YourCombo',
            action:'change',
            fieldLabel:'Select a template',
            queryMode:'local',
            store:this.store,
            name:'item_code',
            displayField:'item_code',
            valueField:'item_code',
            enableKeyEvents: true,
            typeAhead: true,
            mode: 'local',
            forceSelection: true,
            triggerAction: 'all',
            emptyText: 'Select a Template',
            selectOnFocus: true 
4

2 回答 2

1

您应该在应用新过滤器之前清除过滤器:

combogridfilter: function(newValue){
var value1= Ext.getCmp('myCombo').getValue();
    var grid=Ext.getCmp('afteraddingtemplate');
        grid.store.clearFilter(true);
        grid.store.filter('item_code', value1);
},
于 2013-06-24T09:03:42.093 回答
1

您不应该在网格和组合之间共享存储。在组件之间共享存储是自找麻烦。正在发生的事情是,当您过滤网格时,您也过滤了组合。既然是同一家店...

您可以做的是为您的组合使用一个简单的内存存储,在加载网格存储时填充它。

例如,以这种方式配置您的组合:

{
    renderTo: Ext.getBody(),
    xtype:'combo',
    id:'myCombo',
    itemId:'YourCombo',
    action:'change',
    fieldLabel:'Select a template',
    queryMode:'local',
    store: {
        fields: ['item_code']
        ,proxy: {type: 'memory', reader: 'array'}
    },
    name:'item_code',
    displayField:'item_code',
    valueField:'item_code',
    enableKeyEvents: true,
    typeAhead: true,
    mode: 'local',
    forceSelection: true,
    triggerAction: 'all',
    emptyText: 'Select a Template',
    selectOnFocus: true 
}

load并在网格存储的事件中填充它:

grid.getStore().on('load', function(store) {
    Ext.getCmp('myCombo').getStore().loadData(store.getRange());
});
于 2013-06-24T09:16:05.943 回答