Search code examples
extjstreeextjs4.1treegrid

Extjs 4.1 - Listerning in CellEditing plugin not working at second time


i define a treeGrid with plugin CellEditing like

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');
                    }
                }
            })
        ],
        ...

And i have a button when i click this button will call below window (this window has treeGrid above)

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'
 }
]

Everything working at first time but when i close the window at first time and click button to call window again then CellEditting still working but listeners not working ?
How to fix that thanks

EDIT
Please see my example code in http://jsfiddle.net/E6Uss/
In first time when i click button. Everything working well like enter image description here

But when i close Example window and open it again I try click to blocked cell again i get a bug like enter image description here


How to fix this bug? thanks


Solution

  • The problem here is that you are using Ext.create inside the plugins array for the tree grid. This have the effect of creating it once and attaching the result adhoc to your defined class.

    If you close the window, all the resources within the window are destroyed. The second time you instantiate the tree panel, the plugin is not there. Take a look at this fiddle : I see what your issue is. Take a look at 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;
                    }
                }
            }
        }