LayoutBase Fix for strand set to null in remove bead, plus performance 
improvements in js


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/08af60c7
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/08af60c7
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/08af60c7

Branch: refs/heads/develop
Commit: 08af60c7755a9c7dd64ab62cbfff97443841bda7
Parents: b0f7013
Author: greg-dove <[email protected]>
Authored: Fri Jun 9 10:07:20 2017 +1200
Committer: greg-dove <[email protected]>
Committed: Fri Jun 9 10:17:54 2017 +1200

----------------------------------------------------------------------
 .../flex/org/apache/flex/core/LayoutBase.as     | 40 +++++++++++++++-----
 1 file changed, 30 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/08af60c7/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as
index adadc75..be7d642 100644
--- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as
+++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/LayoutBase.as
@@ -76,19 +76,39 @@ package org.apache.flex.core
          *  @productversion FlexJS 0.8
                 * 
                 * @flexjsignorecoercion org.apache.flex.core.ILayoutChild
+                * @flexjsignorecoercion org.apache.flex.events.IEventDispatcher
          */
                public function set strand(value:IStrand):void
                {
-            host = value as ILayoutChild;
-                       
-                       IEventDispatcher(host).addEventListener("widthChanged", 
handleSizeChange);
-                       
IEventDispatcher(host).addEventListener("heightChanged", handleSizeChange);
-                       IEventDispatcher(host).addEventListener("sizeChanged", 
handleSizeChange);
-                       
-                       
IEventDispatcher(host).addEventListener("childrenAdded", handleChildrenAdded);
-                       IEventDispatcher(host).addEventListener("initComplete", 
handleInitComplete);
-                       
-                       IEventDispatcher(host).addEventListener("layoutNeeded", 
handleLayoutNeeded);
+                       var newHost:ILayoutChild = value as ILayoutChild;
+                       var oldHost:ILayoutChild = host;
+                       if (newHost != oldHost) {
+                               var sizeChange:Function = handleSizeChange;
+                var childrenAdded:Function =handleChildrenAdded;
+                               var initComplete:Function = handleInitComplete;
+                               var layoutNeeded:Function = handleLayoutNeeded;
+                if (oldHost) {
+                    
IEventDispatcher(oldHost).removeEventListener("widthChanged", sizeChange);
+                    
IEventDispatcher(oldHost).removeEventListener("heightChanged", sizeChange);
+                    
IEventDispatcher(oldHost).removeEventListener("sizeChanged", sizeChange);
+
+                    
IEventDispatcher(oldHost).removeEventListener("childrenAdded", childrenAdded);
+                    
IEventDispatcher(oldHost).removeEventListener("initComplete", initComplete);
+
+                    
IEventDispatcher(oldHost).removeEventListener("layoutNeeded", layoutNeeded);
+                }
+                               host = newHost;
+                               if (newHost) {
+                    IEventDispatcher(newHost).addEventListener("widthChanged", 
sizeChange);
+                    
IEventDispatcher(newHost).addEventListener("heightChanged", sizeChange);
+                    IEventDispatcher(newHost).addEventListener("sizeChanged", 
sizeChange);
+
+                    
IEventDispatcher(newHost).addEventListener("childrenAdded", childrenAdded);
+                    IEventDispatcher(newHost).addEventListener("initComplete", 
initComplete);
+
+                    IEventDispatcher(newHost).addEventListener("layoutNeeded", 
layoutNeeded);
+                               }
+                       }
                }
                
                /**

Reply via email to