【问题标题】:How to disable a particular data in the combo-box in ExtJS 4.2.1如何在 ExtJS 4.2.1 的组合框中禁用特定数据
【发布时间】:2017-04-17 14:43:16
【问题描述】:

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

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

我想禁用组合框中的值“设备”。所以我尝试了下面的代码,其中orderComboTwo 是我的comboxbox。但是,它不会禁用组合框中列出的数据。

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

【问题讨论】:

  • 如果这是您需要的,请检查此链接。 stackoverflow.com/questions/12827828/…>
  • 嗨,sreenath,它们似乎是特定于该领域的。但我的问题是,我有两个具有相同值的组合框,两个组合框都说(本地,设备和无)..现在我在第一个组合框中选择了“本地”,那么我应该无法在第二个组合框中选择“本地”。可能是动态的。我尝试了什么'listeners: { beforeselect: function(combo, records, eOpts) { if (records.data.value == orderComboOne.getValue()) { orderComboTwo.getStore().data.items[1].data.disabled = true;}',disable = true 不起作用。它是第二个组合框侦听器。 @SreenathPG
  • 我认为您要查找的内容确实很难处理,而且您编写的代码也不可能,因为商店的数据项没有“禁用”属性。如果选择与第一个组合框相同的值,我建议您是否可以进行验证,因此不允许用户继续使用它,或者您可以直接删除从第一个组合框中选择的数据或值每当在第一个组合框中选择值时,第二个组合框就会自行存储。这将是一个更好的解决方案。你怎么看?
  • @HarshitShah 我认为从第二个组合框中删除数据不会更好,因为首先可以在第一个组合框中选择一个值作为“本地”然后我删除第二个组合框中的相同值,用户的想法可能会随着第一个组合框的值而改变,以便他可以使用“设备”现在我必须删除第二个组合框中的相同值。现在的值第二个组合框将只有“无”。希望您理解删除第二个组合框中的值的困难。
  • 不。我的意思是每当您在第一个组合中选择一个值时,您只需重新加载第二个组合存储,只删除第一个组合选择的值。

标签: javascript extjs


【解决方案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 来看看它的实际效果。

【讨论】:

  • 您的代码正在禁用组合框中的特定项目,现在考虑到有两个组合框,组合框 1 中的所有值都不会禁用 ....基于选择我在组合框 1 中制作,我需要禁用组合框 2 中的值。你明白了吗?
  • @NarenSathya 我为你修改了我的小提琴。我认为您可以使用我提供的构建块自己完成这项基本任务。
  • 我不认为这是一项基本任务...实际上我只使用您的代码解决了这个问题..但是我花了更多时间来解决这个问题..也许你可以分享你的想法或那个任务,所以我可以学习和使用你如何使用组合框1选择禁用组合框2中的项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2021-06-10
  • 2012-07-18
  • 2018-11-16
相关资源
最近更新 更多