Success! Looks like we've fixed this one. According to our records the fix was applied for EXTJS-6528 in a recent build.
  1. #1
    Sencha User
    Join Date
    Jun 2009
    Posts
    102
    Vote Rating
    6
    campersau1 is on a distinguished road

      0  

    Default Ext JS 4.1.1 RC2 - Ext.layout.container.BoxOverflow.Menu.destroy throws Exception

    Ext JS 4.1.1 RC2 - Ext.layout.container.BoxOverflow.Menu.destroy throws Exception


    Ext.layout.container.BoxOverflow.Menu.destroy Method throws Exception because me.menuTrigger is undefined.

    The Exception: Uncaught TypeError: Cannot call method 'getItemId' of undefined

    Here is the call Stack:

    trigger is undefined
    menu.jpgAbstractMixedCollection.jpggetComponentId.jpg


    FIX:
    Code:
        destroy: function() {
            var trigger = this.menuTrigger; // <-- menuTrigger can be undefined
    
            if (trigger && !this.layout.owner.items.contains(trigger)) { // fix for this bug
                // Ensure we delete the ownerCt if it's not in the items
                // so we don't get spurious container remove warnings.
                delete trigger.ownerCt;
            }
            Ext.destroy(this.menu, trigger);
        }



    The destroy Method of Ext.layout.container.BoxOverflow.Menu.destroy in Ext 4.1.1 RC1 looked a bit simpler:
    Code:
        destroy: function() {
            Ext.destroy(this.menu, this.menuTrigger);
        }
    Sadly I have no test case at the moment...
    Last edited by campersau1; 14 Jun 2012 at 1:41 AM. Reason: Added possible fix

  2. #2
    Sencha - Ext JS Dev Team evant's Avatar
    Join Date
    Apr 2007
    Location
    Sydney, Australia
    Posts
    16,913
    Vote Rating
    629
    evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute

      0  

    Default


    Is this is you destroy before/after the overflow has happened?
    Evan Trimboli
    Sencha Developer
    Twitter - @evantrimboli
    Don't be afraid of the source code!

  3. #3
    Sencha User
    Join Date
    Jun 2009
    Posts
    102
    Vote Rating
    6
    campersau1 is on a distinguished road

      0  

    Default


    Yes that caused this error!

    The menu was inside a tab which was never activated.
    If I activate the tab and then destroy the hole tabpanel then it worked without throwing the exception.

  4. #4
    Sencha - Ext JS Dev Team evant's Avatar
    Join Date
    Apr 2007
    Location
    Sydney, Australia
    Posts
    16,913
    Vote Rating
    629
    evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute evant has a reputation beyond repute

      0  

    Default


    That's odd. Since it calls Ext.destroy() it checks if the object isn't null first. Will have to check it out.
    Evan Trimboli
    Sencha Developer
    Twitter - @evantrimboli
    Don't be afraid of the source code!

  5. #5
    Sencha User
    Join Date
    Jun 2009
    Posts
    102
    Vote Rating
    6
    campersau1 is on a distinguished road

      0  

    Default


    In the pictures you can see that the menu is distroyed via Ext.destroy.
    The Ext.destroy Method then calls the menu.destroy method, which in Ext 4.1.1 RC2 looks like this:
    Code:
        destroy: function() {
            var trigger = this.menuTrigger; // <-- menuTrigger can be undefined
    
            if (trigger && !this.layout.owner.items.contains(trigger)) { // fix for this bug
                // Ensure we delete the ownerCt if it's not in the items
                // so we don't get spurious container remove warnings.
                delete trigger.ownerCt;
            }
            Ext.destroy(this.menu, trigger);
        }

  6. #6
    Sencha User
    Join Date
    Jun 2009
    Posts
    102
    Vote Rating
    6
    campersau1 is on a distinguished road

      0  

    Default


    Looks like this is fixed in 4.1.1!

Thread Participants: 1