javascript - ExtJS 过滤组合框存储

标签 javascript object extjs filter combobox

我声明了以下组合框:

{
   xtype: 'combobox',
   id:'sizeSelect',
   store: new Ext.data.SimpleStore({
       fields: [
                   {name: 'typeChoosen', type: 'string'},
                   {name: 'sizeValue',  type: 'string'}
       ],
       data: [
           ['DECIMAL','(9.2)'],
           ['DECIMAL','(9.4)'],
           ['DECIMAL','(19.2)'],
           ['DECIMAL','(19.4)'],
           ['DECIMAL','(28.2)'],
           ['DECIMAL','(28.4)'],
           ['DECIMAL','(38.2)'],
           ['DECIMAL','(38.4)'],
           ['TEXT','250'],
           ['TEXT','500'],
           ['TEXT','1000'],
           ['TEXT','2000'],
           ['TEXT','4000'],
           ['INTEGER','dafault']
        ]
    })
}

我在带有网格的面板中使用它,用于“大小”列:

enter image description here

我希望“大小”列中的组合框根据先前的单元格值以及每种类型的相应值进行更新。

在网格面板中,我有以下用于过滤的监听器:

listeners : {
beforeitemdblclick : function( eventThis,  record,  item, index, e, eOpts,objA ){

    var stateCombo = Ext.getCmp('sizeSelect');
    var currentTypeChoosen = record.raw[1]
    stateCombo.store.each(function(storeItem){
            if(storeItem.data.typeChoosen == currentTypeChoosen){ 
                stateCombo.store.filter("typeChoosen",currentTypeChoosen);
            }                                           
    }); 
}

看起来比较正确,但它返回组合框中的一个对象,而不仅仅是值。我对 ExtJS 还很陌生,我真的想不出一种方法让它按照我想要的方式工作。

更新

这是我的工作代码:

{
xtype: 'combobox',
id:'sizeSelect',
editable:false,
valueField: 'typeValue',
displayField: 'typeValue',
mode:'local',
lastQuery: '',
allowBlank: false,
listeners:{
},
store: new Ext.data.SimpleStore({
    fields: ['size', 'typeValue'],
    data: [
            ['DECIMAL', '(9,2)'],
            ['DECIMAL', '(9,4)'],
            ['DECIMAL', '(19,2)'],
            ['DECIMAL', '(19,4)'],
            ['DECIMAL', '(28,2)'],
            ['DECIMAL', '(28,4)'],
            ['DECIMAL', '(38,2)'],
            ['DECIMAL', '(38,4)'],
            ['TEXT', '250'],
            ['TEXT', '500'],
            ['TEXT', '1000'],
            ['TEXT', '2000'],
            ['TEXT', '4000']
        ]
})
}

var panel3 = Ext.create('Ext.panel.Panel', { 
    id:'step3',
    border:0,
    xtype: 'panel', 
    anchor:'100% 100%',
    hideMode:'display',
    bodyStyle:"overflow-y:scroll !important;",
    hidden:true,
    autoHeight:true,
    items: [{
        xtype: 'grid',
        id:'tableTypeGrid',
        border: false,                      
        plugins: [
            Ext.create('Ext.grid.plugin.CellEditing', {
                clicksToEdit: 2
            })
        ],
        listeners : {
            beforeitemdblclick : function( eventThis,  record,  item, index, e, eOpts ){
                var stateSizeCombo = Ext.getCmp('sizeSelect');
                var sizeColumnStore = stateSizeCombo.getStore();
                var prevCellValue = record.data.type;
                sizeColumnStore.clearFilter();
                sizeColumnStore.filter('size', prevCellValue); //
                }
            },
            ...

组合框的属性非常重要:)

最佳答案

我认为你可以使用beforeedit网格事件(从 Ext.grid.plugin.Editing 添加),如下所示:

    beforeedit: function(plugin, context) {
        // Current editor panel size combo
        var sizeCombo = plugin.editor.down('combo[name=size]');
        if(sizeCombo) {
            var sizeStore = sizeCombo.getStore();
            sizeStore.clearFilter();
            sizeStore.filter('type', context.record.get('type'));
        }
    }

检查这个simple example .

关于javascript - ExtJS 过滤组合框存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41238308/

相关文章:

javascript - Fetch API 默认跨源行为

javascript - 数组数据显示在控制台中,但是当我在 html 中打印时,它没有在 angularjs 中显示空数组

java - 生成唯一的对象 ID

对象

javascript - Ext js Rest代理使用请求URL而不是代理中定义的REST API URL

javascript - 为什么要更改我的轴 (moment.js) 的时间值?

javascript - 滚动时显示两个像素值之间的 div

javascript - 这是常规的构造函数吗?

CSS、Salesforce、ExtJS 和蓝调

javascript - Ext Js 和 Adob​​e Air