Hi Guys,

Going in that way:

<fx:Declarations>
<foo:FooFormatter id=“fooFormat”/>
</fx:Declarations>

<foo:FooComponent>
<foo:BazComponent text=“{fooFormat.format(date)}”/>
</foo:FooComponent>
<foo:SomeOtherFooComponent>
<foo:SomeOtherBazComponent text=“{fooFormat.format(date)}”/>
</foo:SomeOtherFooComponent>


We probably have Bindable warning - Am I right?

Thanks,
Piotr

On Fri, Jan 18, 2019, 2:37 PM Harbs <harbs.li...@gmail.com> wrote:

> I don’t think you could use interfaces in that case.
>
> Also, some formatters have options such as separator and such. I guess the
> options could be static, but that would preclude having more than one
> setting in a single app.
>
> > On Jan 18, 2019, at 11:33 AM, Carlos Rovira <carlosrov...@apache.org>
> wrote:
> >
> > Hi,
> > just one thing to add to the discussion. Maybe could be good to implement
> > as static so we don't need an instance per component?
> > So using "SomeFormatterClass.format(date)" could be possible?
> >
> > El vie., 18 ene. 2019 a las 4:38, Alex Harui (<aha...@adobe.com.invalid
> >)
> > escribió:
> >
> >> You can override in MXML if the code checks before loading from
> >> ValuesManager.
> >>
> >> What strands can it go on and why?
> >>
> >> -Alex
> >>
> >> On 1/17/19, 2:16 PM, "Harbs" <harbs.li...@gmail.com> wrote:
> >>
> >>    Interesting. I never considered that. Although there’s then no way to
> >> override in MXML.
> >>
> >>
> >>    I think keeping it a bead leaves the most flexibility.
> >>
> >>    I don’t know of any pain points in Flex.
> >>
> >>> On Jan 17, 2019, at 11:47 PM, Alex Harui <aha...@adobe.com.INVALID>
> >> wrote:
> >>>
> >>> IIRC, it doesn't have to be a bead to be specified in CSS.  You just
> >> have to define the property.  Then ValuesManager will return the Class
> and
> >> you instantiate.  Where you store it after that doesn't matter.  It
> doesn't
> >> have to be a strand.
> >>>
> >>> It really comes down to how folks should want to work with
> >> Formatters.  Were there any pain points in Flex?
> >>>
> >>> HTH,
> >>> -Alex
> >>>
> >>> On 1/17/19, 1:40 PM, "Harbs" <harbs.li...@gmail.com <mailto:
> >> harbs.li...@gmail.com>> wrote:
> >>>
> >>>   OK, true.
> >>>
> >>>   To me the main advantage of it being a bead is the ability to
> >> specify the default in CSS. The idea behind specifying the bead was to
> >> specifically reference it (or override it). Using the bead specified in
> CSS
> >> is difficult if not impossible in MXML.
> >>>
> >>>> On Jan 17, 2019, at 10:50 PM, Alex Harui <aha...@adobe.com.INVALID>
> >> wrote:
> >>>>
> >>>> Not sure I see any advantage of it being a bead there.  What
> >> reference to the strand or application does it need?  Once you give
> >> anything an id it is "globally" available.
> >>>>
> >>>> <fx:Declarations>
> >>>> <foo:FooFormatter id=“fooFormat”/>
> >>>> </fx:Declarations>
> >>>>
> >>>> <foo:FooComponent>
> >>>>  <foo:BazComponent text=“{fooFormat.format(date)}”/>
> >>>> </foo:FooComponent>
> >>>> <foo:SomeOtherFooComponent>
> >>>>  <foo:SomeOtherBazComponent text=“{fooFormat.format(date)}”/>
> >>>> </foo:SomeOtherFooComponent>
> >>>>
> >>>> My 2 cents,
> >>>> -Alex
> >>>>
> >>>> On 1/17/19, 12:09 PM, "Harbs" <harbs.li...@gmail.com> wrote:
> >>>>
> >>>>  I’d keep it a bead, so you could do something like this (I think):
> >>>>  <foo:FooComponent>
> >>>>  <js:beads>
> >>>>         <foo:FooFormatter id=“fooFormat”/>
> >>>>  </js:beads>
> >>>>  <foo:BazComponent text=“{fooFormat.format(date)}”/>
> >>>>  </foo:FooComponent>
> >>>>
> >>>>> On Jan 17, 2019, at 9:43 PM, Alex Harui <aha...@adobe.com.INVALID>
> >> wrote:
> >>>>>
> >>>>>
> >>>>>
> >>>>> On 1/17/19, 11:30 AM, "Harbs" <harbs.li...@gmail.com <mailto:
> >> harbs.li...@gmail.com>> wrote:
> >>>>>
> >>>>> Currently, the view must know about the formatter AND the
> >> formatter must know about the view.
> >>>>>
> >>>>> I’m proposing that the view knows there is an IFormatter and just
> >> calls a format() function which is common to all formatters.
> >>>>>
> >>>>> Changing it to the way I’m proposing would also allow for
> >> something like this: text = new FooFormatter.format(baz);
> >>>>>
> >>>>> I think it’s reasonable for a view to know it’s using some
> >> formatter.
> >>>>>
> >>>>> Yeah, I think it is reasonable too.  However, calling "new
> >> FooFormatter.format(baz)" is not going to work well with
> >> Formatters-as-beads.  And instantiating a formatter each time is
> probably
> >> also going to be painful for Garbage Collection and if the formatter
> needs
> >> to have other properties set (potentially from locale information).
> >>>>>
> >>>>> That's why I recommend thinking this through.  We need to agree on
> >> how folks will want to use and maybe share formatters and how to do so
> from
> >> MXML, which is more property-oriented than function-oriented.
> >>>>>
> >>>>> One issue is that DateField wants to instantiate its own
> >> DateFormatter but then that can't be easily shared as the DateFormatter
> in
> >> a user's app.
> >>>>>
> >>>>> HTH,
> >>>>> -Alex
> >>>>>
> >>>>>> On Jan 17, 2019, at 9:10 PM, Alex Harui <aha...@adobe.com.INVALID>
> >> wrote:
> >>>>>>
> >>>>>> I don't like the way it is now.  That sounds more like a
> >> validator workflow.  Having DateFormatter require IDateChooserModel
> doesn't
> >> sound right.  I think the goal of the current implementation was to not
> >> require the views to know about the formatter. Then you could change
> what
> >> the view would display by using a different formatting bead.  Maybe that
> >> was a bad idea.  I think you are proposing that the views know they are
> >> using a formatter.
> >>>>>>
> >>>>>> Let's think about how we want Formatters to be used.  The first
> >> question that comes to mind is whether the common case is that a single
> >> formatting "algorithm" would be used throughout an application.  If so,
> >> then scattering formatting beads on strands in different places in the
> >> application will be painful to manage unless you have a central config
> to
> >> manage them.
> >>>>>>
> >>>>>> IOW, I think it would be rare for dates or currency to be
> >> formatted in one way in some component and differently in some other
> >> component.
> >>>>>>
> >>>>>> The second thing to consider is loose-coupling.  How will the
> >> View find a formatter?  The advantage of beads is that formatters can be
> >> replaced, but only if the view finds the formatter by interface name.
> But
> >> then they might be able to find the formatter some other way anyway.
> >> Related: should the presence of a formatter be optional?  I think not in
> >> the common case.  The view shouldn't have to worry about the formatter
> not
> >> being there when expected.  A view either needs a formatter or it
> doesn’t.
> >>>>>>
> >>>>>> Next question:  How should views be able to use formatters when
> >> written in MXML?  If there is a shared formatter, that implies function
> >> call binding which is sort of heavy.  Having a bead for each property
> being
> >> formatted allows the binding system to use SimpleBinding which is
> >> cheaper/faster.  But I think it might be too painful to have a formatter
> >> instance for each formatted property.
> >>>>>>
> >>>>>> So, maybe it is better to have Views expect formatters.  But
> >> maybe formatters should be Singletons so they are shared.
> >>>>>>
> >>>>>> Thoughts?
> >>>>>> -Alex
> >>>>>>
> >>>>>> On 1/17/19, 9:36 AM, "Andrew Wetmore" <cottag...@gmail.com
> >> <mailto:cottag...@gmail.com> <mailto:cottag...@gmail.com <mailto:
> >> cottag...@gmail.com>>> wrote:
> >>>>>>
> >>>>>> This simplification sounds good. Will you be annotating how to
> >> use the new
> >>>>>> bead structures, maybe with some examples, for those of us who
> >> are lost
> >>>>>> among the strands?
> >>>>>>
> >>>>>> On Thu, Jan 17, 2019 at 12:26 PM Harbs <harbs.li...@gmail.com
> >> <mailto:harbs.li...@gmail.com>> wrote:
> >>>>>>
> >>>>>>> I have the occasion this week to deal with the formatter
> >> classes, and I’d
> >>>>>>> like to make some changes. I’d like input from others on the
> >> subject.
> >>>>>>>
> >>>>>>> Taking SimpleDateFormatter as an example:
> >>>>>>> 1. The Formatter assumes that its being attached to a Strand
> >> with an
> >>>>>>> IDateChooserModel.
> >>>>>>> 2. It requires a “propertyName to be set and concatenates that
> >> with
> >>>>>>> “Changed” and adds an event listener to the model.
> >>>>>>> 3. When the property is changed, it formats the result which
> >> must be a
> >>>>>>> “selectedDate” and then dispatches an event.
> >>>>>>> 4. The view bead must attach an event listener to the Formatter
> >> to get
> >>>>>>> notification when the format changes.
> >>>>>>> 5. It also invariably attaches an event listener to the model
> >> when the
> >>>>>>> model changes.
> >>>>>>> 6. When the model changes we have first an event picked up by the
> >>>>>>> formatter and then the formatter dispatches a separate event
> >> which is
> >>>>>>> picked up by the view. The view then explicitly gets the
> >> formatted date
> >>>>>>> from the formatter.
> >>>>>>>
> >>>>>>> That’s a lot of indirection for no apparent reason. It also
> >> limits how a
> >>>>>>> formatter can be used. A DateFormatter can only be used in
> >> conjunction with
> >>>>>>> a IDateChooserModel and it can only format a “selectedDate”. I
> >> ran into
> >>>>>>> issues when trying to figure out how to use the formatters with
> >> date ranges.
> >>>>>>>
> >>>>>>> I want to change it to the following:
> >>>>>>>
> >>>>>>> 1. Make the formatter classes very simple Beads.
> >>>>>>> 2. It will make no assumptions on there being any other beads
> >> and will not
> >>>>>>> attach any event listeners.
> >>>>>>> 3. Likewise, it will not dispatch any events.
> >>>>>>> 4. Date Formatter classes would have a format(date:Date):String
> >> method
> >>>>>>> which would take any valid date and return the formatted string.
> >>>>>>> 5. When a view needs to update a formatted date, it would simply
> >> get the
> >>>>>>> format bead and call format(). This would allow the bead to be
> >> instantiated
> >>>>>>> by any class and would greatly simplify the code.
> >>>>>>>
> >>>>>>> I’d make similar changes to the other formatter classes.
> >>>>>>>
> >>>>>>> Any objections to these changes?
> >>>>>>>
> >>>>>>> Harbs
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> Andrew Wetmore
> >>>>>>
> >>>>>>
> >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcottage14.blogspot.com%2F&amp;data=02%7C01%7Caharui%40adobe.com%7Cf94019751d934c60bb2d08d67cc9643e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636833601775326776&amp;sdata=2F%2BRWlR1o%2Bh7piIABUOwKWRaL4VhuFWYYwgHrkq994c%3D&amp;reserved=0
> >> <
> >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcottage14.blogspot.com%2F&amp;data=02%7C01%7Caharui%40adobe.com%7Cf94019751d934c60bb2d08d67cc9643e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636833601775326776&amp;sdata=2F%2BRWlR1o%2Bh7piIABUOwKWRaL4VhuFWYYwgHrkq994c%3D&amp;reserved=0
> >
> >> <
> >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcottage14.blogspot.com%2F&amp;data=02%7C01%7Caharui%40adobe.com%7Cf94019751d934c60bb2d08d67cc9643e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636833601775326776&amp;sdata=2F%2BRWlR1o%2Bh7piIABUOwKWRaL4VhuFWYYwgHrkq994c%3D&amp;reserved=0
> >> <
> >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcottage14.blogspot.com%2F&amp;data=02%7C01%7Caharui%40adobe.com%7Cf94019751d934c60bb2d08d67cc9643e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636833601775326776&amp;sdata=2F%2BRWlR1o%2Bh7piIABUOwKWRaL4VhuFWYYwgHrkq994c%3D&amp;reserved=0
> >>
> >> <
> >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcottage14.blogspot.com%2F&amp;data=02%7C01%7Caharui%40adobe.com%7Cf94019751d934c60bb2d08d67cc9643e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636833601775326776&amp;sdata=2F%2BRWlR1o%2Bh7piIABUOwKWRaL4VhuFWYYwgHrkq994c%3D&amp;reserved=0
> >> <
> >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcottage14.blogspot.com%2F&amp;data=02%7C01%7Caharui%40adobe.com%7Cf94019751d934c60bb2d08d67cc9643e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636833601775326776&amp;sdata=2F%2BRWlR1o%2Bh7piIABUOwKWRaL4VhuFWYYwgHrkq994c%3D&amp;reserved=0
> >
> >> <
> >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcottage14.blogspot.com%2F&amp;data=02%7C01%7Caharui%40adobe.com%7Cf94019751d934c60bb2d08d67cc9643e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636833601775326776&amp;sdata=2F%2BRWlR1o%2Bh7piIABUOwKWRaL4VhuFWYYwgHrkq994c%3D&amp;reserved=0
> >> <
> >>
> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcottage14.blogspot.com%2F&amp;data=02%7C01%7Caharui%40adobe.com%7Cf94019751d934c60bb2d08d67cc9643e%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636833601775326776&amp;sdata=2F%2BRWlR1o%2Bh7piIABUOwKWRaL4VhuFWYYwgHrkq994c%3D&amp;reserved=0
> >>>>>
> >>
> >>
> >>
> >>
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
>
>

Reply via email to