如何以编程方式禁用Ext.grid.EditorGridPanel中的单元格

时间:2015-08-10 21:27:29

标签: javascript combobox extjs4 cell tablecell

我有一个使用ExtJS 4的Web应用程序,它包含一个Ext.grid.EditorGridPanel。

Ext.grid.EditorGridPanel的其中一列有一个组合框编辑器,当存储根据商店中另一个字段的值加载时,我想以编程方式禁用它。

看起来这应该很简单 - 但到目前为止似乎没有任何效果。

当Grid的存储加载时,我有一个监听器来检查每一行并根据另一个字段的值禁用索引4中的组合框。

我唯一无法工作的是实际禁用组合框。

有什么建议吗?

这是伪代码。提前致谢

listeners: {
    'load': function(st, records, options) {

        var view = getMyEditorGridPanel().getView();

        for (var i = 0; i < this.getCount(); i++) {             

            if (store.getAt(i).get('setDisabled') === 'Y') {


                //The cell at index 4 has a combobox editor - I CAN'T GET IT TO DISABLE!!
                view.getCell(i,4).setDisabled(true);
            }
        }
     }

1 个答案:

答案 0 :(得分:0)

从我的观点来看,你需要在这里管理两件不同的事情

  1. 单元样式,单元格未被编辑时的显示方式(启用或禁用)
  2. 编辑器可用性,如何在编辑单元格时做出反应(应该可以编辑单元格)
  3. 细胞样式

    对于第一个我建议为每个单元格提供样式以使其看起来禁用,这可以在渲染时实现而不是尝试做当商店加载时(顺便说一句,没有什么可以确保您在获得加载事件回调后完全呈现网格项)。您可以通过提供 Ext.grid.ViewView 的实现来为每行返回一个自定义类。getRowClass

    viewConfig: {
            getRowClass: function(record, rowIndex, rowParams, store) {
                return record.get("disabled") ? "mail-disabled" : "";
            }
        }
    

    编辑器可用性

    您还需要处理 Ext.grid.plugin.CellEditingView beforeedit 事件提供自定义逻辑以确定编辑器何时可用

     plugins: [
        Ext.create('Ext.grid.plugin.CellEditing', {
            clicksToEdit: 1,
            listeners: {
                beforeedit: function(editor, e, eOpts) {                
                    return e.record.get("disabled") == false;
                }
            }
        })]
    

    您可以找到solutions here工作示例,希望它有助于解决您的问题。