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); >+ } >+ } > } > > /** >