ExtJS 4 - 如何有条件地编辑网格中的单元格?

时间:2011-09-16 06:48:37

标签: extjs grid extjs4 cell edit

我有一个使用单元格编辑插件的网格面板。

在此网格面板中,我希望以下列方式对单元格进行条件编辑:

当用户点击要编辑的单元格时,应显示确认对话框 - “您要编辑单元格吗?” - 如果他选择“是”,则关注单元格并开始编辑,否则单元格将保持禁用状态。

我尝试使用'beforeedit'事件,但是即使显示确认框,用户也可以使用箭头键(编辑器是数字字段)修改值,即通过鼠标单击已禁用,但箭头键仍可以更改字段的值。

此外,当用户选择“是”时,单元格会失去焦点,我无法在“是”点击后立即开始编辑。我尝试过使用'焦点'方法,但没有运气。

有人可以指导吗?

提前致谢。

更多信息:

我尝试使用 - startEditByPosition() - 当用户选择“是”时,单元格编辑插件的功能。但是,由于这个原因,确认框会一直显示,就像选择“是”编辑开始一样,再次调用beforeedit事件。有什么帮助吗?

1 个答案:

答案 0 :(得分:16)

您可以创建一些标志变量,如isEditAllowed。在beforeedit中查看。如果是假显示confirm则别做什么。如果用户确认将isEditAllowed设置为truestartEditByPosition。在edit事件集isEditAllowedfalse

        plugins: [
          Ext.create('Ext.grid.plugin.CellEditing', {
              clicksToEdit: 1,
            listeners: {
              'beforeedit': function(e) {
                var me = this;
                var allowed = !!me.isEditAllowed;
                if (!me.isEditAllowed)
                  Ext.Msg.confirm('confirm', 'Are you sure you want edit?', function(btn){
                    if (btn !== 'yes')
                      return;
                    me.isEditAllowed = true;
                    me.startEditByPosition({row: e.rowIdx, column: e.colIdx});
                  });
                return allowed;
              },
              'edit': function(e) {
                this.isEditAllowed = false;
              }
            }
          })
      ],

Here is demo.