I did think of the variable issues. Using instance variables does not generally strike me as problematic. (unless there’s a lot of them)
I did find some interesting articles on inlining vs function calling. Here’s one.[1] Too many super calls might be bad because “call” can be expensive. Yes. A more functional approach might be appropriate. Yishay had an interesting idea on maybe using CSS to apply functionality. I’m going to sit on this one for a while and see if I come up with any brainstorms. Harbs [1]http://blog.calyptus.eu/seb/2011/01/javascript-call-performance-just-inline-it/ <http://blog.calyptus.eu/seb/2011/01/javascript-call-performance-just-inline-it/> > On Jul 31, 2017, at 3:58 PM, Alex Harui <aha...@adobe.com.INVALID> wrote: > > You're welcome to try different approaches to sharing code in the base > classes. Often, though, loops over children need to be inlined not only > for performance reasons (to cut out one function call in the inner loop), > but also for information sharing reasons (local variables accumulating > values would now need to be instance variables). But maybe a more > functional programming style would work here. > > OneFlexibleLayout probably shouldn't set align-items or any CSS styles at > all on the JS side. Those values should be set in CSS. If the SWF side > has to run this sort of code, that's the cost of emulating JS in SWF. Or > maybe we need a SWF-side layout base that truly tries to emulate browser > behavior. > > Also, for OneFlexible, there is no promise that it uses flex-box under the > hood, it just has to solve what I found to be a hard problem in the > browser (one stretchy thing), so the implementations for JS and SWF can be > widely divergent. If on the other hand we had a FlexBoxContainer, it > would be the job of that code to emulate flex-box on the SWF side and do > almost nothing on the JS side except set flex-box on the div. > > My 2 cents, > -Alex > > On 7/31/17, 3:42 AM, "Harbs" <harbs.li...@gmail.com> wrote: > >> Here’s a dilema I ran into this morning: >> >> The OneFlexibleLayout beads have some code which look like this: >> if (!contentView.element.style["align-items"]) >> contentView.element.style["align-items"] = "center”; >> >> What that does, is check if “align-items” is already set and sets it to >> center if not. I’m assuming the reason it sets it to center is because >> the default of flex-box is “stretch” which is not a very good default. >> >> The problem is that center is not necessarily the best default either. I >> would have probably made flex-start the default. In fact, it looks like >> it is the default for swf is left. (flex-start is what I needed in my >> situation.) >> >> I have just committed a change to make the JS consistent with the SWF. It >> now defaults to “flex-start” due to CSS defined on Container. I had to >> add a Container typename for all containers for this to work. I hope this >> is okay. I think it makes sense anyway, because otherwise, there’s no way >> to set custom CSS for all containers. If the style sets “center”, then >> that is honored to center it. The default can be overridden using CSS on >> the JS side, but it will not have an effect on the SWF side. >> >> So far, so good. >> >> Now my question is the follows: It seems kind of random that only >> alignItems:center does anything. I’d think that it should either support >> flex-start, flex-end,center and stretch or not do anything. I’d guess the >> answer is to create OneFlexibleLayoutWithAlignment? >> >> The problem with that is we’d end up writing lots of duplicate code. In >> fact, I went through the different layout classes and the general pattern >> is constant across them: >> >> 1. Do something to the parent >> 2. Loop through the children, and do something to each one of them. >> >> There are exceptions to this rule (such as the swf side of >> OneFlexibleChild layouts), but the majority of the layouts follow this >> pattern. I was thinking of the following idea to make it easier to >> modularize functionality and avoid code repeat: >> >> Change LayoutBase to the following: >> >> public function layout():Boolean >> { >> var contentView:ILayoutView = layoutView; >> var n:int = contentView.numElements; >> if (n == 0) return false; >> if(!layoutParent()) >> return false >> >> for(var i:int=0; i < n; i++) { >> var child:UIBase = contentView.getElementAt(i) as UIBase; >> if(!layoutChild(child)) >> return false; >> } >> >> return true; >> } >> protected function layoutParent():Boolean{ >> // override in subclass >> return false; >> } >> protected function layoutChild(child:UIBase):Boolean{ >> // override in subclass >> return false; >> } >> >> Then in the subclasses, you would only override layout() if it does not >> follow this pattern. When it does, you would just override layoutParent() >> and layoutChild(). That has the following benefits: >> >> 1. You do not need to write the loop in every subclass. >> 2. Each subclass can use the pieces of the layout that make sense. >> 3. If a subclass is just adding additional functionality (such as setting >> the alignment of the children), it only needs to add code for that >> specific functionality without the need to either rewrite the layout >> function twice or make two loops. >> >> Thoughts? >> Harbs >> >