I guess I don't believe that removing beads is so common that every app
needs to carry this code around.  I wonder if there is a way to inject
removability as needed.

Having a RemovableXXXLayout could override the strand setter and remove
listeners if the handlers are protected.

Thoughts?
-Alex

On 6/8/17, 3:22 PM, "gregd...@apache.org" <gregd...@apache.org> wrote:

>LayoutBase Fix for strand set to null in remove bead, plus performance
>improvements in js
>
>
>Project: 
>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-us
>.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Frepo&data=02%7C01%7C%7Cb863f5cff77
>e41e305b708d4aebcd62e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C6363255
>73442866659&sdata=NsSQs6LJBQaYIJ36tZ%2FgMmMyuffAlo7pAuwtopOok2g%3D&reserve
>d=0
>Commit: 
>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-us
>.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fcommit%2F08af60c7&data=02%7C01%7C%
>7Cb863f5cff77e41e305b708d4aebcd62e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%
>7C0%7C636325573442866659&sdata=a8HJuqkEEii03BRyFH6lMcvkLFirlclo6HwG%2F6w4J
>kA%3D&reserved=0
>Tree: 
>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-us
>.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Ftree%2F08af60c7&data=02%7C01%7C%7C
>b863f5cff77e41e305b708d4aebcd62e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C
>0%7C636325573442866659&sdata=CcHeFSf6IMQ75kKXSE%2BWY23J7VrbJauoxO1TvG%2BHS
>Yk%3D&reserved=0
>Diff: 
>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-us
>.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fdiff%2F08af60c7&data=02%7C01%7C%7C
>b863f5cff77e41e305b708d4aebcd62e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C
>0%7C636325573442866659&sdata=E%2B6iEUFqZB3%2BO15%2BK3sHlnaiuIkWgm8DvWVcmUm
>nnIk%3D&reserved=0
>
>Branch: refs/heads/develop
>Commit: 08af60c7755a9c7dd64ab62cbfff97443841bda7
>Parents: b0f7013
>Author: greg-dove <greg.d...@gmail.com>
>Authored: Fri Jun 9 10:07:20 2017 +1200
>Committer: greg-dove <greg.d...@gmail.com>
>Committed: Fri Jun 9 10:17:54 2017 +1200
>
>----------------------------------------------------------------------
> .../flex/org/apache/flex/core/LayoutBase.as     | 40 +++++++++++++++-----
> 1 file changed, 30 insertions(+), 10 deletions(-)
>----------------------------------------------------------------------
>
>
>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fgit-wip-us
>.apache.org%2Frepos%2Fasf%2Fflex-asjs%2Fblob%2F08af60c7%2Fframeworks%2Fpro
>jects%2FBasic%2Fsrc%2Fmain%2Fflex%2Forg%2Fapache%2Fflex%2Fcore%2FLayoutBas
>e.as&data=02%7C01%7C%7Cb863f5cff77e41e305b708d4aebcd62e%7Cfa7b1b5a7b344387
>94aed2c178decee1%7C0%7C0%7C636325573442866659&sdata=fnKUKGhxZfwPRFkiMwfiri
>aNYV21HE8X7463sLtyYOo%3D&reserved=0
>----------------------------------------------------------------------
>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