Alex, I have implemented the code to destroy event listeners in all of my
widgets, as well as the calling class. The calling class is called from the
root as a module. Before unloading the module I do the following to try and
remove all event listeners;

private function clearModuleEvents(mdlModule:ModuleLoader):void
{
        trace('Starting clearModuleEvents')
    for(var idx:int = mdlModule.numChildren - 1; idx >= 0; idx--)
    {
        trace('idx=' + idx + 'isContainer(objChild)=' +isContainer(objChild) +
'isContainer(mdlModule.getChildAt(idx))=' +
isContainer(mdlModule.getChildAt(idx)));
        var objChild:DisplayObject = mdlModule.getChildAt(idx);
        trace('flash.utils.getQualifiedClassName(objChild)=' +
flash.utils.getQualifiedClassName(objChild)); 
        var childContainer:DisplayObjectContainer = objChild as
DisplayObjectContainer;
        clearChildEvents(childContainer);
                if ("clearEvents" in objChild)
                {
                        var fncClearEvents:Function = objChild["clearEvents"];
                if (objChild.hasOwnProperty('id')) trace('Clearing Events 
in==>>' +
objChild['id']);
                        fncClearEvents();
                        fncClearEvents = null;
                }
                if ("dataProvider" in objChild)objChild["dataProvider"] = null;
                if ("selectedIndex" in objChild)objChild["selectedIndex"] = -1;
                if ("selectedItem" in objChild)objChild["selectedItem"] = null;
                if ("value" in objChild)objChild["value"] = null;
    }
    objChild = null;
        trace('Finished clearModuleEvents')
}

private function clearChildEvents(dpsContainer:DisplayObjectContainer):void
{
    for(var idx:int = dpsContainer.numChildren - 1; idx >= 0; idx--)
    {
        var objChild:DisplayObject = dpsContainer.getChildAt(idx);
                if (isContainer(objChild))
                {
                var childContainer:DisplayObjectContainer = objChild as
DisplayObjectContainer;
                clearChildEvents(childContainer);
                }
                if ("killMe" in objChild)
                {
                        var fncKillMe:Function = objChild["killMe"];
                if (objChild.hasOwnProperty('id')) trace('Killing Events 
in==>>' +
objChild['id']);
                        fncKillMe();
                        fncKillMe = null;
                }
                else if ("clearEvents" in objChild)
                {
                        var fncClearEvents:Function = objChild["clearEvents"];
                if (objChild.hasOwnProperty('id')) trace('Clearing Events 
in==>>' +
objChild['id']);
                        fncClearEvents();
                        fncClearEvents = null;
                }
                if ("dataProvider" in objChild)objChild["dataProvider"] = null;
                if ("selectedIndex" in objChild)objChild["selectedIndex"] = -1;
                if ("selectedItem" in objChild)objChild["selectedItem"] = null;
//              if ("value" in objChild)objChild["value"] = null;
                objChild = null;
    }
}





--
Sent from: http://apache-flex-users.2333346.n4.nabble.com/

Reply via email to