I happened to be testing against FlexJSStore at the time I discovered the need for this, and there is some removing going on.
I think I improved performance compared to how it was originally by removing coercion in js and using local references for some of the repeat listener references/avoiding repeat closure lookups on js, so it is probably 'less' PAYG than it was before, with more safety, but I get the point. I'm not sure about injection, but I will come back to this and add a removable layout subclass for the FlexJSStore demo (not sure if the PanelView or whatever seems to be doing this is also used in other examples, I have not checked). On Sat, Jun 10, 2017 at 10:45 AM, Alex Harui <aha...@adobe.com> wrote: > 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%7Cfa7b1b5a7b34438794aed2c178de > cee1%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%7Cfa7b1b5a7b34438794aed2c178de > cee1%7C0% > >7C0%7C636325573442866659&sdata=a8HJuqkEEii03BRyFH6lMcvkLFirlc > lo6HwG%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%7Cfa7b1b5a7b34438794aed2c178de > cee1%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%7Cfa7b1b5a7b34438794aed2c178de > cee1%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%7Cb863f5cff77e41e305b708d4aebc > d62e%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); > >+ } > >+ } > > } > > > > /** > > > >