使用combobox extjs mvc过滤/搜索网格

时间:2013-06-24 08:56:50

标签: extjs extjs-mvc

我有一个comboBox,其中的项目来自数据库,并且已经使用该comboBox应用了过滤器选项...组合第一次工作正常,但问题是当我想在第二次从comboBox中选择项目时在我的组合中找不到项目(仅限上一个选定的项目)..

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 

2 个答案:

答案 0 :(得分: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);
},

答案 1 :(得分: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());
});