如何在ExtJS 4.2.1的组合框中禁用特定数据

时间:2017-04-17 14:43:16

标签: javascript extjs

如何在ExtJS 4.2.1的组合框中禁用特定数据项?该 组合框值是数据和值对:

orderTypes = [
    ['Local', 'Local'],
    ['Device', 'Device'],
    ['None', 'None']
];

我想在组合框中禁用值'Device'。所以我用了下面的代码,其中orderComboTwo是我的comboxbox。但是,它不会禁用组合框中列出的数据。

 orderComboTwo.getStore().data.items[1].data.disabled = true;

1 个答案:

答案 0 :(得分:1)

默认情况下,ComboBox无法禁用某些条目。

然而,它有beforeselect事件,您可以使用它来告诉组合框是否可以选择某个值,具体取决于例如在另一个组合框的当前选定值上:

[{
    xtype:'combo',
    listeners:{
        beforeselect:function(cb, record) {
            if(cb.nextSibling().getSelection().indexOf(record) > -1) return false;
        }
    },
},{
    xtype:'combo',
    listeners:{
        beforeselect:function(cb, record) {
            if(cb.previousSibling().getSelection().indexOf(record) > -1) return false;
        }
    }
}]

当然,您总是可以覆盖ComboBox以添加基于布尔模型字段禁用某些项目的可能性:

Ext.define('MyApp.ux.DisableCombo',{
    extend: 'Ext.form.field.ComboBox',
    xtype:'disablecombo',
    disabledItemCls: 'disabledListItem',
    disabledField: 'disabled',
    onBeforeSelect: function(list, record, recordIndex) {
        if(record.get(this.disabledField)) return false;
        this.callParent(arguments);
    },
    initComponent: function() {
        var me = this;
        if(!me.listConfig) me.listConfig = {};
        Ext.apply(me.listConfig, {
            tpl: new Ext.XTemplate(
                '<ul class="' + Ext.plainListCls + '"><tpl for=".">',
                    '<li role="option" unselectable="on" class="' + Ext.baseCSSPrefix + 'boundlist-item' + '<tpl if="' + me.disabledField + '"> ' + me.disabledItemCls + '</tpl>">{' + me.displayField + '}' + '</li>',
                '</tpl></ul>'
            )
        });
        me.callParent(arguments);
    }
});

我有made a fiddle for you来查看它的实际效果。