Hi Alex, I think I don't need to dispatch a "dataChange" event, I only want
to ease writing.
In old Flex I use to do something similar as we did here and it works.

Is there an easy way to do this? I only want to avoid the cumbersome ...
"ValueObject(data)" everywhere and substitute for something more easier.

I think this should work:

<mdl:ListItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009";
                      xmlns:js="library://ns.apache.org/flexjs/basic"
                      xmlns:mdl="library://ns.apache.org/flexjs/mdl"
                      xmlns="http://www.w3.org/1999/xhtml";>

    <fx:Script>
<![CDATA[
import vos.ProductVO;

            [Bindable]
            public function get product():ProductVO
            {
                return data as ProductVO;
            }
]]>
  </fx:Script>

    <js:beads>
        <js:ItemRendererDataBinding />
    </js:beads>

    <js:Span text="{product.label}"/>

</mdl:ListItemRenderer>


And I think it looks more elegant, and if you have a huge IR, the dev will
be more grateful.

Note;
/if I use return ProductVO(data); it throws a coercion error in browser.

2016-12-09 20:18 GMT+01:00 Alex Harui <aha...@adobe.com>:

> If you don't dispatch "dataChange" it has no chance of working.  There
> still might be other issues.
>
> -Alex
>
> On 12/9/16, 11:08 AM, "carlos.rov...@gmail.com on behalf of Carlos Rovira"
> <carlos.rov...@gmail.com on behalf of carlos.rov...@codeoscopic.com>
> wrote:
>
> >I tried this, but with no luck, still doesn't output nothing:
> >
> ><mdl:ListItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009";
> >                      xmlns:js="library://ns.apache.org/flexjs/basic"
> >                      xmlns:mdl="library://ns.apache.org/flexjs/mdl"
> >                      xmlns="http://www.w3.org/1999/xhtml";>
> >
> >    <fx:Script>
> ><![CDATA[
> >import vos.ProductVO;
> >
> >            [Bindable]
> >            private var _product:ProductVO;
> >
> >            [Bindable("dataChange")]
> >            public function get product():ProductVO
> >            {
> >                return data as ProductVO;
> >            }
> >]]>
> >  </fx:Script>
> >
> >    <js:beads>
> >        <js:ItemRendererDataBinding />
> >    </js:beads>
> >
> >    <js:Span text="{product.label}"/>
> >
> ></mdl:ListItemRenderer>
> >
> >
> >
> >2016-12-09 19:59 GMT+01:00 Alex Harui <aha...@adobe.com>:
> >
> >> Well, there isn't any dataChange property being dispatched, but the
> >> ItemRendererDataBinding may need to be upgraded to handle doing that.
> >>
> >> FWIW, I would probably not override data and just do:
> >>
> >> [Bindable("dataChange")]
> >> bublic function get product():ProductVO
> >> {
> >>     return data as ProductVO;
> >> }
> >>
> >> -Alex
> >>
> >> On 12/9/16, 10:50 AM, "carlos.rov...@gmail.com on behalf of Carlos
> >>Rovira"
> >> <carlos.rov...@gmail.com on behalf of carlos.rov...@codeoscopic.com>
> >> wrote:
> >>
> >> >Hi Alex,
> >> >
> >> >I get to work as you said, but trying to make a bindable var to reduce
> >> >verbosity like this:
> >> >
> >> ><mdl:ListItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009";
> >> >                      xmlns:js="library://ns.apache.org/flexjs/basic"
> >> >                      xmlns:mdl="library://ns.apache.org/flexjs/mdl"
> >> >                      xmlns="http://www.w3.org/1999/xhtml";>
> >> >
> >> >    <fx:Script>
> >> ><![CDATA[
> >> >import vos.ProductVO;
> >> >
> >> >            [Bindable]
> >> >            public var product:ProductVO;
> >> >
> >> >            [Bindable("dataChange")]
> >> >            override public function set data(value:Object):void
> >> >            {
> >> >                if (value != data)
> >> >                {
> >> >                    super.data = value;
> >> >                    product = data as ProductVO; // I tried as well
> >>with
> >> >ProductVO(data)
> >> >                }
> >> >            }
> >> >]]>
> >> ></fx:Script>
> >> >
> >> >    <js:beads>
> >> >        <js:ItemRendererDataBinding />
> >> >    </js:beads>
> >> >
> >> >    <js:Span text="{product.label}"/>
> >> >
> >> ></mdl:ListItemRenderer>
> >> >
> >> >
> >> >makes product.label doesn't output nothing, do you know what can be
> >> >happen?
> >> >
> >> >Thanks
> >> >
> >> >
> >> >
> >> >2016-12-09 17:48 GMT+01:00 Alex Harui <aha...@adobe.com>:
> >> >
> >> >> Well, that is a legitimate warning, but is innocuous.  I'm tempted to
> >> >>try
> >> >> to figure out how to tell Maven to accept these warnings, but I don't
> >> >>know
> >> >> how to do that.  That's why the Ant builds work.  Or get the
> >>compiler to
> >> >> suppress the warning.
> >> >>
> >> >> The other answer is to switch to ValueObjects if you are just using
> >> >>plain
> >> >> Object.  Then your binding expression would look like
> >> >> "{MyValueObject(data).label}.  MyValueObject would have to have the
> >> >> appropriate [Bindable] metadata.
> >> >>
> >> >> -Alex
> >> >>
> >> >> On 12/9/16, 8:39 AM, "carlos.rov...@gmail.com on behalf of Carlos
> >> >>Rovira"
> >> >> <carlos.rov...@gmail.com on behalf of carlos.rov...@codeoscopic.com>
> >> >> wrote:
> >> >>
> >> >> >Hi Alex,
> >> >> >
> >> >> >just updated all commits and test your ItemRenderer and is not
> >> >>working, do
> >> >> >you know what could be?
> >> >> >
> >> >> >The project 'App' has been successfully compiled and optimized.
> >> >> >/Users/carlosrovira/Dev/Flex/source/flexjs/flex-asjs/
> >> >> examples/flexjs/MDLEx
> >> >> >ample/src/main/flex/itemRenderers/CustomListItemRenderer.mxml(28):
> >> >> >col: 12 Data binding will not be able to detect assignments to
> >>'label'.
> >> >> >text="{data.label}" >
> >> >> >           ^
> >> >> >[INFO]
> >> >>
> >> >>>---------------------------------------------------------
> >> ---------------
> >> >> >[INFO] BUILD FAILURE
> >> >> >
> >> >> >
> >> >> >2016-12-09 16:25 GMT+01:00 Alex Harui <aha...@adobe.com>:
> >> >> >
> >> >> >>
> >> >> >>
> >> >> >> On 12/9/16, 5:35 AM, "carlos.rov...@gmail.com on behalf of Carlos
> >> >> >>Rovira"
> >> >> >> <carlos.rov...@gmail.com on behalf of carlosrov...@apache.org>
> >> wrote:
> >> >> >>
> >> >> >> >Hi
> >> >> >> >
> >> >> >> >I need to know how to deal with data binding in different
> >> >>situations,
> >> >> >> >ItemRenderer, View, Container, Component, Bead,...
> >> >> >> >
> >> >> >> >I saw various classes ConstantBinding, ViewBeadBinding...
> >> >> >> >
> >> >> >> >Hope someone could share the main principles of Binding in FlexJS
> >> >> >>
> >> >> >> Binding in the regular Flex SDK is extremely wasteful.  That's
> >>why we
> >> >> >> often see folks recommend that you start taking out data bindings
> >> >>when
> >> >> >>you
> >> >> >> have performance issues.  Flex Mobile default item renderers are
> >> >>written
> >> >> >> in AS instead of MXML for that reason. Binding in general has to
> >> >> >> "highly-sensitive".  It needs to look for all kinds of possible
> >> >>change
> >> >> >> conditions, such as the source or destination being changed as
> >>well
> >> >>as
> >> >> >>the
> >> >> >> property on the source being changed.  In the regular Flex SDK,
> >>this
> >> >> >> highly-sensitive detection mechanism is used everywhere you use
> >> >>binding
> >> >> >> expressions.
> >> >> >>
> >> >> >> in FlexJS, we want to have different implementations based on
> >>certain
> >> >> >> scenarios.  There are classes named XXXDataBinding (vs YYYBinding)
> >> >>that
> >> >> >> implement a change detection mechanism specific to that scenario.
> >> So
> >> >> >> ViewDataBinding knows that most data bindings will probably be
> >>from
> >> >>the
> >> >> >> applicationModel property to various controls.  The various
> >> >> >>XXXDataBinding
> >> >> >> implementations use the YYYBinding classes like ConstantBinding
> >>and
> >> >> >> SimpleBinding to optimize for certain patterns that don't require
> >>as
> >> >> >>much
> >> >> >> overhead to set up.  There is a GenericBinding for everything
> >>else.
> >> >> >>Also,
> >> >> >> having a choice of YYYBinding classes allows the developer to not
> >> >>use {}
> >> >> >> expressions and simply add a YYYBindingClass as a bead and get
> >> >>binding
> >> >> >>to
> >> >> >> work without the overhead of the compiler setting up a data
> >>structure
> >> >> >>for
> >> >> >> the XXXDataBindingClass to interpret at instantiation time.  So,
> >> >>this is
> >> >> >> another example of PAYG.  You can be lazy and have the compiler
> >>and
> >> >> >> framework figure out what to do with a {} expression, or you can
> >>save
> >> >> >>code
> >> >> >> by manually implementing it, or you can save even more by writing
> >>AS
> >> >>to
> >> >> >> addEventListener for the right thing at the right time.
> >> >> >>
> >> >> >> Anyway, you mentioned ItemRenderer above, and I found out
> >>yesterday
> >> >>that
> >> >> >> ItemRenderer binding needed its own implementation.  It can take
> >> >> >>advantage
> >> >> >> of knowing that if you bind to data.something, that there is no
> >>need
> >> >>to
> >> >> >> set change detection for the source or destination objects.  It
> >>knows
> >> >> >>that
> >> >> >> the only trigger is when in the item renderer lifecycle, the data
> >> >> >>property
> >> >> >> is set.  I just pushed that change.  Now my renderer looks like:
> >> >> >>
> >> >> >> <js:MXMLItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009";
> >> >> >>
> >>xmlns:js="library://ns.apache.org/flexjs/basic"
> >> >> >>                      width="100%">
> >> >> >> <js:beads>
> >> >> >>         <js:VerticalLayout />
> >> >> >>         <js:ItemRendererDataBinding />
> >> >> >>     </js:beads>
> >> >> >>     <js:Label width="100%" height="30" style="fontWeight:bold"
> >> >> >> text="{data.qname}" >
> >> >> >>     </js:Label>
> >> >> >>     <js:MultilineLabel id="description" width="100%"
> >> >> >> text="{data.description}" />
> >> >> >> </js:MXMLItemRenderer>
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> HTH,
> >> >> >> -Alex
> >> >> >>
> >> >> >>
> >> >> >
> >> >> >
> >> >> >--
> >> >> >
> >> >> >Carlos Rovira
> >> >> >Director General
> >> >> >M: +34 607 22 60 05
> >> >> >http://www.codeoscopic.com
> >> >> >http://www.avant2.es
> >> >> >
> >> >> >Este mensaje se dirige exclusivamente a su destinatario y puede
> >> >>contener
> >> >> >información privilegiada o confidencial. Si ha recibido este mensaje
> >> >>por
> >> >> >error, le rogamos que nos lo comunique inmediatamente por esta misma
> >> >>vía y
> >> >> >proceda a su destrucción.
> >> >> >
> >> >> >De la vigente Ley Orgánica de Protección de Datos (15/1999), le
> >> >> >comunicamos
> >> >> >que sus datos forman parte de un fichero cuyo responsable es
> >> >>CODEOSCOPIC
> >> >> >S.A. La finalidad de dicho tratamiento es facilitar la prestación
> >>del
> >> >> >servicio o información solicitados, teniendo usted derecho de
> >>acceso,
> >> >> >rectificación, cancelación y oposición de sus datos dirigiéndose a
> >> >> >nuestras
> >> >> >oficinas c/ Paseo de la Habana 9-11, 28036, Madrid con la
> >>documentación
> >> >> >necesaria.
> >> >>
> >> >>
> >> >
> >> >
> >> >--
> >> >
> >> >Carlos Rovira
> >> >Director General
> >> >M: +34 607 22 60 05
> >> >http://www.codeoscopic.com
> >> >http://www.avant2.es
> >> >
> >> >Este mensaje se dirige exclusivamente a su destinatario y puede
> >>contener
> >> >información privilegiada o confidencial. Si ha recibido este mensaje
> >>por
> >> >error, le rogamos que nos lo comunique inmediatamente por esta misma
> >>vía y
> >> >proceda a su destrucción.
> >> >
> >> >De la vigente Ley Orgánica de Protección de Datos (15/1999), le
> >> >comunicamos
> >> >que sus datos forman parte de un fichero cuyo responsable es
> >>CODEOSCOPIC
> >> >S.A. La finalidad de dicho tratamiento es facilitar la prestación del
> >> >servicio o información solicitados, teniendo usted derecho de acceso,
> >> >rectificación, cancelación y oposición de sus datos dirigiéndose a
> >> >nuestras
> >> >oficinas c/ Paseo de la Habana 9-11, 28036, Madrid con la documentación
> >> >necesaria.
> >>
> >>
> >
> >
> >--
> >
> >Carlos Rovira
> >Director General
> >M: +34 607 22 60 05
> >http://www.codeoscopic.com
> >http://www.avant2.es
> >
> >Este mensaje se dirige exclusivamente a su destinatario y puede contener
> >información privilegiada o confidencial. Si ha recibido este mensaje por
> >error, le rogamos que nos lo comunique inmediatamente por esta misma vía y
> >proceda a su destrucción.
> >
> >De la vigente Ley Orgánica de Protección de Datos (15/1999), le
> >comunicamos
> >que sus datos forman parte de un fichero cuyo responsable es CODEOSCOPIC
> >S.A. La finalidad de dicho tratamiento es facilitar la prestación del
> >servicio o información solicitados, teniendo usted derecho de acceso,
> >rectificación, cancelación y oposición de sus datos dirigiéndose a
> >nuestras
> >oficinas c/ Paseo de la Habana 9-11, 28036, Madrid con la documentación
> >necesaria.
>
>


-- 

Carlos Rovira
Director General
M: +34 607 22 60 05
http://www.codeoscopic.com
http://www.avant2.es

Este mensaje se dirige exclusivamente a su destinatario y puede contener
información privilegiada o confidencial. Si ha recibido este mensaje por
error, le rogamos que nos lo comunique inmediatamente por esta misma vía y
proceda a su destrucción.

De la vigente Ley Orgánica de Protección de Datos (15/1999), le comunicamos
que sus datos forman parte de un fichero cuyo responsable es CODEOSCOPIC
S.A. La finalidad de dicho tratamiento es facilitar la prestación del
servicio o información solicitados, teniendo usted derecho de acceso,
rectificación, cancelación y oposición de sus datos dirigiéndose a nuestras
oficinas c/ Paseo de la Habana 9-11, 28036, Madrid con la documentación
necesaria.

Reply via email to