Results 1 to 3 of 3

Thread: Destroyed Ext.tree.View's event listeners on store aren't removed

    Looks like we can't reproduce the issue or there's a problem in the test case provided.
  1. #1

    Default Destroyed Ext.tree.View's event listeners on store aren't removed

    Ext version tested:

    Browser versions tested against:
    Chrome 24.0.1312.56 m
    Firefox 18.0.1

    Destroyed Ext.tree.View is not removed from the TreeStore's event listeners. I have a window that has a treepanel. When I close and reopen the window the same TreeStore is reused and tried to be loaded. During store load beforefill event is called for the destroyed view and gives error.

    Steps to reproduce the problem:
    I've modified the treegrid.js example in order to place treepanel inside a window to reuse it. I've presented it as a test case.

    Test Case:

        enabled: true,
        disableCaching: false
    });Ext.Loader.setPath('Ext.ux', '../ux');
    Ext.onReady(function() {
        //we want to setup a model and store instead of using dataUrl
        Ext.define('Task', {
            extend: '',
            fields: [
                {name: 'task',     type: 'string'},
                {name: 'user',     type: 'string'},
                {name: 'duration', type: 'string'},
                {name: 'done',     type: 'boolean'}
        var store = Ext.create('', {
            model: 'Task',
            proxy: {
                type: 'ajax',
                //the store will get the content from the .json file
                url: 'treegrid.json'
            folderSort: true
        var button = Ext.create('Ext.Button', {
          renderTo: 'show-tree-button',
          text: 'Show Tree',
          handler: function() {
            var tree2 = Ext.create('Ext.tree.Panel', {
                title: 'Core Team Projects',
                width: 500,
                height: 300,
                collapsible: true,
                useArrows: true,
                rootVisible: false,
                store: store,
                multiSelect: true,
                singleExpand: true,
                //the 'columns' property is now 'headers'
                columns: [{
                    xtype: 'treecolumn', //this is so we know which column will show the tree
                    text: 'Task',
                    flex: 2,
                    sortable: true,
                    dataIndex: 'task'
                    //we must use the templateheader component so we can use a custom tpl
                    xtype: 'templatecolumn',
                    text: 'Duration',
                    flex: 1,
                    sortable: true,
                    dataIndex: 'duration',
                    align: 'center',
                    //add in the custom tpl for the rows
                    tpl: Ext.create('Ext.XTemplate', '{duration:this.formatHours}', {
                        formatHours: function(v) {
                            if (v < 1) {
                                return Math.round(v * 60) + ' mins';
                            } else if (Math.floor(v) !== v) {
                                var min = v - Math.floor(v);
                                return Math.floor(v) + 'h ' + Math.round(min * 60) + 'm';
                            } else {
                                return v + ' hour' + (v === 1 ? '' : 's');
                    text: 'Assigned To',
                    flex: 1,
                    dataIndex: 'user',
                    sortable: true
                }, {
                    xtype: 'checkcolumn',
                    header: 'Done',
                    dataIndex: 'done',
                    width: 40,
                    stopSelection: false
                }, {
                    text: 'Edit',
                    width: 40,
                    menuDisabled: true,
                    xtype: 'actioncolumn',
                    tooltip: 'Edit task',
                    align: 'center',
                    icon: '../simple-tasks/resources/images/edit_task.png',
                    handler: function(grid, rowIndex, colIndex, actionItem, event, record, row) {
                        Ext.Msg.alert('Editing' + (record.get('done') ? ' completed task' : '') , record.get('task'));
                    // Only leaf level tasks may be edited
                    isDisabled: function(view, rowIdx, colIdx, item, record) {
                        return !;
            var win = Ext.create('Ext.Window', {
              items: tree2,
              listeners: {
                'boxready': function() {
                  if (!store.isLoading())
                scope: this
          scope: this
    I couldn't find a way to overcome this bug. So I'm hoping, until the bug is fixed in source code someone will present a temporary fix.


  2. #2
    Sencha Premium User mitchellsimoens's Avatar
    Join Date
    Mar 2007
    Gainesville, FL


    Checking the hasListeners object in 4.2.0 beta 2 it looks like the listeners are removed properly.
    Mitchell Simoens @LikelyMitch

    Check out my GitHub:

    Posts are my own, not any current, past or future employer's.

  3. #3


    Thanks for the reply.

    What should I do to overcome this bug while using Ext 4.1?


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts