0

我用插件 CellEditing定义了一个treeGrid

Ext.define('MyExample', {
        extend: 'Ext.tree.Panel',   
        id: 'example',
        alias: 'example',
        ....
        plugins: [
            Ext.create('Ext.grid.plugin.CellEditing', {
                clicksToEdit: 1,
                listeners: {
                    beforeedit: function(plugin, edit){
                        alert('don't run second time');
                    }
                }
            })
        ],
        ...

当我单击此按钮时,我有一个按钮将在窗口下方调用(此窗口上方有 treeGrid)

Ext.create('Ext.window.Window', {
title: 'Phân xử lý',
modal:true,
height: 500
width: 500
layout: 'border',
...
item[
 {
  title: 'example',
  region: 'center',
  xtype: 'example', // that here
  layout: 'fit'
 }
]

一切都在第一次工作,但是当我第一次关闭窗口并单击按钮再次调用窗口时,CellEditting 仍然工作但监听器不工作?
怎么解决 谢谢

编辑
请在我第一次单击按钮时在http://jsfiddle.net/E6Uss/中查看我的示例代码。
一切正常 在此处输入图像描述

但是当我关闭示例窗口并再次打开它时,我尝试再次单击以阻止单元格,我得到一个错误,例如 在此处输入图像描述


如何修复这个错误?谢谢

4

4 回答 4

6

这里的问题是您在树网格的插件数组中使用Ext.create 。这具有创建一次并将结果临时附加到您定义的类的效果。

如果关闭窗口,窗口内的所有资源都将被销毁。第二次实例化树面板时,插件不存在。看看这个小提琴:我明白你的问题是什么。看看http://jsfiddle.net/jdflores/E6Uss/1/

     {
        ptype : 'cellediting',
        clicksToEdit: 1,
        listeners: {
            beforeedit: function(plugin, edit){
                console.log('EDITOR');
                if (edit.record.get('block')) {
                    alert('this cell have been blocked');
                    return false;
                }
            }
        }
    }
于 2013-07-24T19:11:32.850 回答
1

每次单击按钮时,您都会重新创建窗口。这种重新创建可能会弄乱您的配置对象或破坏其中的关联或引用,或类似的东西。尝试通过将按钮代码替换为以下内容来每次重用窗口:

    Ext.create('Ext.Button', {
        text: 'Click me',
        visible: false,
        renderTo: Ext.getBody(),

        handler: function(button) {
            if(!button.myWindow)
            {
                button.myWindow = Ext.create('Ext.window.Window', {
                   title: 'Example',
                   height     : 300,
                   width      : 500,
                   layout: 'border',
                   closeAction: 'hide',
                   items: [{            
                            region: 'center',
                            floatable:false,
                            layout:'fit',
                            xtype: 'example',
                            margins:'1 1 1 1'
                        }
                    ]
                 });
            }
            button.myWindow.show();
        }
    });
于 2013-07-24T18:01:02.297 回答
-1

我在这里整理了一个工作示例:http: //jsfiddle.net/jdflores/6vJZf/1/

我认为您的专栏的问题在于它的 dataIndex 期望编辑器值是布尔类型(因为“块”被设置为 datIndex 而不是“日期”)。我假设您使用“阻止”字段只是为了识别哪些被阻止进行编辑。我修改了这里提供的小提琴:http: //jsfiddle.net/jdflores/6vJZf/1/

       {
            text: 'Block Date',
            dataIndex: 'date',
            xtype: 'datecolumn',
            format: 'd/m/Y',
            editor: {
                xtype: 'datefield',
                allowBlank: true,
                format: 'd/m/Y'
            } 
        }
于 2013-07-24T14:27:09.187 回答
-1

也许它需要完成编辑单元格,尝试完成它:

...
beforeedit: function(plugin, edit){
     alert('don't run second time');
     plugin.completeEdit();
}

Sencha: CompleteEdit

于 2013-07-24T08:04:52.550 回答