Guys,

Many thanks for all your thoughts. Harbs thank you for this utility it will
be very useful. I think I'm ok with having some specialized stuff which is
doing things like removing bead etc. I did small clean up of FormItemView
and put it in other thread.

I wrote also StackedFormView but I didn't commit it to Royale cause Carlos
is seeing it a bit differently than my requirements. If someone would like
to have it I will probably put it in transpiledactionscript.

My Stacked is:
L*
C

Carlos propose to have it as in Flex:
L
C*

L - Label - title
C - Content
* - required asterix

Thanks,
Piotr

pon., 28 sty 2019 o 19:10 Alex Harui <aha...@adobe.com.invalid> napisał(a):

> IMO, either use a few more words to describe it here, or show the code in
> a branch.  I don't think the generic problem of cleaning up an instance
> from an external instance is solvable, but maybe there are sweet spots
> along the way.
>
> -Alex
>
> On 1/28/19, 8:26 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>
>     Good point.
>
>     If we would implement my idea of notifications, we could use utility
> functions to clean out beads.
>
>     If anyone is interested in this direction, I can write an
> implementation in a branch to show what I’m talking about…
>
>     Harbs
>
>     > On Jan 28, 2019, at 6:22 PM, Alex Harui <aha...@adobe.com.INVALID>
> wrote:
>     >
>     > It is fine to have a utility function such as this, but IMO, it
> doesn't actually solve the problem.  If the original bead does not know how
> to remove itself, then a version of that bead needs to be created that does
> know how to remove itself.  While we could add replaceable versions of
> every bead, that would flood the documentation and code-intelligence
> eventually.
>     >
>     > Replacing beads should be a rare occurrence and the APIs should
> indicate that.  I guess I am not making myself clear, but every time I say
> we are going to remove "removeBead" I always say that there will be a
> utility function to do it and then someone responds with "hey we still need
> a way to do this".  That way is the utility function.
>     >
>     > It might turn out that there is a way to write most beads in a way
> that another bead can clean it up.  That requires making event handlers
> public instead of private/protected, which isn't my favorite idea since it
> also clutters code-intelligence and documentation.
>     >
>     > One other idea along these lines that I've never tried is a
> "splitter bead".  In electronics and elsewhere, a splitter allows one plug
> to plug in two things, with an optional switch.  So a LayoutSplitterBead
> (which is also a strand) would allow both a HorizontalLayout and
> VerticalLayout to be on its strand, and have some flag that switches which
> layout is in play by redirecting calls to one of the two beads.
>     >
>     > HTH,
>     > -Alex
>     >
>     > On 1/28/19, 2:57 AM, "Carlos Rovira" <carlosrov...@apache.org
> <mailto:carlosrov...@apache.org>> wrote:
>     >
>     >    Hi Harbs
>     >
>     >    this seems to me the right way to go.
>     >
>     >    In the current case, I think Jewel should not know about how to
> clean
>     >    itself since is not PAYG. So Piotr should subclass the bead and
> add the
>     >    clean up functionality an configure as default in this project.
> Then use
>     >    your replaceBead to do the change
>     >
>     >    thanks all for taking a look, I think we got it :)
>     >
>     >    @Piotr solves that your problem?
>     >
>     >    Carlos
>     >
>     >
>     >    El lun., 28 ene. 2019 a las 11:20, Harbs (<harbs.li...@gmail.com>)
> escribió:
>     >
>     >> I just added a utility function for this.
>     >>
>     >> I thought of checking to see if the bead has a beadRemoved() method
> and
>     >> conditionally calling that, but it seemed not PAYG and hacky.
>     >>
>     >> My thoughts are to use this like so:
>     >>
>     >> var removedBead:MyBeadThatKnowsHowToCleaupAfterItself =
>     >> replaceBead(strand, newBead,ILayoutBead);
>     >> if(removedBead)removedBead.cleanup();
>     >>
>     >>> On Jan 28, 2019, at 12:06 PM, Harbs <harbs.li...@gmail.com> wrote:
>     >>>
>     >>> I mentioned a long time ago that I really want to implement a
>     >> notification system for strands and beads. I’ve always felt that
> events are
>     >> kind of hacky.
>     >>>
>     >>> I would require a little bit of scaffolding for the notifications
> so
>     >> it’s not truly PAYG, but the notifications could really be plug and
> play. I
>     >> think the net result would be less code as opposed to the current
> system of
>     >> sending events.
>     >>>
>     >>> For this case, I think a replaceBead() utility function would
> probably
>     >> do the trick.
>     >>>
>     >>>> On Jan 28, 2019, at 10:38 AM, Carlos Rovira <
> carlosrov...@apache.org>
>     >> wrote:
>     >>>>
>     >>>> HI Alex
>     >>>>
>     >>>> mostly agree with your thoughts. Just some points:
>     >>>>
>     >>>> * While I think beads should be "instantiation time", don't agree
> with
>     >>>> wanting to remove the "removeBead" method. We're a framework, and
> people
>     >>>> will find this problem. So is difficult to explain the we don't
> have any
>     >>>> way to do this
>     >>>> * In the other hand, I think we should have as you proposed in
> your
>     >>>> response, some utility function to handle this, so people could
> manage
>     >> it
>     >>>> in this strange case.
>     >>>>
>     >>>> So, finally, I think Piotr, should create a class function or
> something
>     >>>> like this. If he can do something generalist, that could go to our
>     >> repo, if
>     >>>> is something more tied to his code, that should go to his
> codebase.
>     >>>>
>     >>>> Thoughts?
>     >>>>
>     >>>>
>     >>>> El lun., 28 ene. 2019 a las 6:40, Alex Harui
> (<aha...@adobe.com.invalid
>     >>> )
>     >>>> escribió:
>     >>>>
>     >>>>> I know there have been other responses, but I think this
> original post
>     >> is
>     >>>>> the best place for my response.
>     >>>>>
>     >>>>> IMO, sealed classes are another safety/security measure.
> Changing the
>     >>>>> code in a class at runtime invites opportunities for hacking
> that are
>     >>>>> really hard to detect.  The set of beads assigned to a strand
> would be
>     >>>>> instantiated in the constructor if we could do it that early,
> but we
>     >> want
>     >>>>> to allow someone to declare options/overrides of default
> behavior and
>     >> the
>     >>>>> only practical way to do it is to wait a bit.  But once the
>     >> instantiation
>     >>>>> lifecycle is over, you really should be able to examine what the
>     >> instance
>     >>>>> is composed of.   It shouldn't change later.  Later changes
> create all
>     >>>>> kinds of havoc for code coverage tools, debugging, and other
>     >> productivity
>     >>>>> issues.
>     >>>>>
>     >>>>> So, IMO, it is best to try to make the composition of an instance
>     >>>>> declarable at author-time.  If you need to specify something for
> an
>     >> inner
>     >>>>> child, we have ways of doing that.  ItemRenderers specify the
> inner
>     >>>>> children of a list.  A Panel's TitleBar can be swapped for a
> different
>     >>>>> titlebar.  If you want a component that can switch between
> laying out
>     >>>>> horizontally and vertically, you could use states or other
> techniques
>     >> to
>     >>>>> swap between a child with HorizonalLayout and a child with
>     >> VerticalLayout,
>     >>>>> but changing a single child's beads at runtime is not a best
>     >> practice.  You
>     >>>>> could also create a VerticalOrHorizontalLayout bead.  All of
> these
>     >>>>> techniques make it easier to see at author-time what the pieces
> are.
>     >> That
>     >>>>> way, when debugging into the child where the MXML/CSS said
>     >> HorizontalLayout
>     >>>>> and  you see a VerticalLayout, you are less likely to be
> surprised and
>     >>>>> think there is a bug in the layout assignment when there isn't.
>     >>>>>
>     >>>>> And thus, because of PAYG, none of our existing beads carry code
>     >> around to
>     >>>>> cleanup if removed from the strand, and I've mentioned recently
> that I
>     >>>>> seriously considering we should take removeBead out of IStrand
> and
>     >> UIBase.
>     >>>>> However, I agree with whoever responded that we shouldn't block
> bead
>     >>>>> removal.  We should just make it a truly rare occurrence.
> Somebody,
>     >> some
>     >>>>> day, will come up with a rare reason to need it.  But they will
> need
>     >> to use
>     >>>>> beads that carry extra code that does the clean up and call some
>     >> utility
>     >>>>> function that removes the bead from the strand.
>     >>>>>
>     >>>>> So, I don't fully understand this scenario and am too backlogged
> to
>     >> really
>     >>>>> dig through it, but please first attempt to find patterns that
> allow
>     >>>>> specification of the children and their layout at author-time.
> Think
>     >> of
>     >>>>> beads as an instantiation-time composition of a class instance.
> Then
>     >>>>> consider beads that can go "both ways".  Then consider beads
> that can
>     >> be
>     >>>>> removed.  But for PAYG reasons, we don't want to have all beads
> know
>     >> how to
>     >>>>> be removed.
>     >>>>>
>     >>>>> My 2 cents,
>     >>>>> -Alex
>     >>>>>
>     >>>>> On 1/27/19, 12:26 AM, "Carlos Rovira" <carlosrov...@apache.org>
>     >> wrote:
>     >>>>>
>     >>>>>  Hi,
>     >>>>>
>     >>>>>  Piotr and I found a situation where we don't know how to solve
> with
>     >>>>> some
>     >>>>>  generalist solution. Hope others here could give some ideas.
>     >>>>>
>     >>>>>  The setup: We have a layout bead that decorates the strand with
> a css
>     >>>>> class
>     >>>>>  selector. The bead is configured in CSS as a default bead
>     >>>>>
>     >>>>>  The problem: We found that adding another layout bead at
> runtime that
>     >>>>>  "substitute" the default bead and adds other CSS class
> selector, left
>     >>>>> the
>     >>>>>  selector(s) from the old layout bead untouched.
>     >>>>>
>     >>>>>  Notice that adding the new layout bead in MXML through beads
> array is
>     >>>>> ok,
>     >>>>>  since (I think) default bead is never instantiated and the
> second one
>     >>>>> is
>     >>>>>  the only one running its code. The problem happens if we try to
> do
>     >> the
>     >>>>>  change at runtime at a later time.
>     >>>>>
>     >>>>>  So, our question is: How to deal with beads that are already
>     >>>>> instantiated
>     >>>>>  and needs to be removed. How we should operate with it? Should
> be
>     >> have
>     >>>>> some
>     >>>>>  removal mechanism in Royale to do this?
>     >>>>>
>     >>>>>  For more info and code about this issue, Piotr shared some
> source
>     >> code
>     >>>>> in
>     >>>>>  other recent thread about Jewel Group.
>     >>>>>
>     >>>>>  Thanks
>     >>>>>
>     >>>>>  --
>     >>>>>  Carlos Rovira
>     >>>>>
>     >>>>>
>     >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C629bc21a49c5414559c808d6853d6025%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842896082091861&amp;sdata=cCoJJhusdR%2FLjHR4dl5kVIFG%2B3fdf4RERQVwELV6MTc%3D&amp;reserved=0
> <
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C629bc21a49c5414559c808d6853d6025%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842896082091861&amp;sdata=cCoJJhusdR%2FLjHR4dl5kVIFG%2B3fdf4RERQVwELV6MTc%3D&amp;reserved=0
> >
>     >>>>>
>     >>>>>
>     >>>>>
>     >>>>
>     >>>> --
>     >>>> Carlos Rovira
>     >>>>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C629bc21a49c5414559c808d6853d6025%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842896082091861&amp;sdata=cCoJJhusdR%2FLjHR4dl5kVIFG%2B3fdf4RERQVwELV6MTc%3D&amp;reserved=0
> <
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C629bc21a49c5414559c808d6853d6025%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842896082101866&amp;sdata=mwHbqna6uLLN9SphMlWFySQNtVLxiUoVmD6whlyrYLs%3D&amp;reserved=0
> >
>     >>>
>     >>
>     >>
>     >
>     >    --
>     >    Carlos Rovira
>     >
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C629bc21a49c5414559c808d6853d6025%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842896082101866&amp;sdata=mwHbqna6uLLN9SphMlWFySQNtVLxiUoVmD6whlyrYLs%3D&amp;reserved=0
> <
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C629bc21a49c5414559c808d6853d6025%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636842896082101866&amp;sdata=mwHbqna6uLLN9SphMlWFySQNtVLxiUoVmD6whlyrYLs%3D&amp;reserved=0
> >
>
>
>

-- 

Piotr Zarzycki

Patreon: *https://www.patreon.com/piotrzarzycki
<https://www.patreon.com/piotrzarzycki>*

Reply via email to