Hello Greg,

Thanks for your answer.
I will test that.

Nicolas

Le lun. 18 mai 2020 à 13:48, Greg Dove <[email protected]> a écrit :

>
> There's a few things to take note of here.
>
> 1. If you are binding to a static constant in another class, you need to
> reference it via the other class (even if it is in ancestry). This is the
> same as actionscript. That means importing the class inside a script block.
> You don't need to use member access on the class if it is the current class
> (the mxml document class).
>
> 2. The MaxNumberCharacters bead was not set up to be a binding target (it
> was not propagating changes after startup values). I updated that, so it
> should be usable in the way you want when you either rebuild, or download
> the next nightly build (whichever you are doing).
>
> 3. For custom classes, you need to make sure you use the correct namespace
> for the class level properties. This should be the same namespace as the
> class itself.
>
> so for <ecran:Ecran1Class>
>
> you would use
> <ecran:beads> ...ContainerDataBinding bead here ...</ecran:beads>
>
>
> Here's how I tested:
>
> <ecrans:Ecran1Class xmlns:fx="http://ns.adobe.com/mxml/2009";
>     xmlns:j="library://ns.apache.org/royale/jewel"
>     xmlns:js="library://ns.apache.org/royale/basic"
>     xmlns:ecrans="ecrans.*">
>
>     <fx:Script>
>         import ecrans.Ecran1Class;
>
>         //alternative... see below
>         public static const LOCAL_MAX_CHARS_NOM:int = 25;
>     </fx:Script>
>
>     <ecrans:beads>
>         <js:ContainerDataBinding/>
>     </ecrans:beads>
>
>     <j:Form width="100%" height="100%" id="searchForm"  >
>
>         <j:FormItem  id="labelNom"  label="nom :" width="100%" >
>             <j:TextInput id="nom" >
>                 <j:beads>
>                     <j:MaxNumberCharacters
> maxlength="{Ecran1Class.MAX_CHARS_NOM}" />
>                     <!-- an alternative option below, getting the constant
> from this class -->
>                    <!-- <j:MaxNumberCharacters
> maxlength="{LOCAL_MAX_CHARS_NOM}" />-->
>                 </j:beads>
>             </j:TextInput>
>         </j:FormItem>
>     </j:Form>
> </ecrans:Ecran1Class>
>
>
> From base class:
>
> package ecrans
> {
>
> import org.apache.royale.jewel.View;
>
>     public class Ecran1Class extends View
> {
>
>         public static const MAX_CHARS_NOM:int = 25;
>
>         public function Ecran1Class()
>         {
>             super();
>         }
>
>     }
> }
>
> Hope that helps.
>
>
> On Mon, May 18, 2020 at 6:22 PM Greg Dove <[email protected]> wrote:
>
>>
>> I will try to look at this in the next few hours.
>>
>>
>> On Mon, May 18, 2020 at 6:18 PM Alex Harui <[email protected]> wrote:
>>
>>> Unfortunately, we could just have a bug in the Binding code.  My first
>>> thought when looking at the stack dump was “I wonder if we tested binding
>>> to a static const in a base class?”.  I’m hoping that folks who’ve spent
>>> more time debugging the binding code will step in and follow up with you.
>>>
>>>
>>>
>>> -Alex
>>>
>>>
>>>
>>> *From: *Nicolas Aguttes <[email protected]>
>>> *Reply-To: *"[email protected]" <[email protected]>
>>> *Date: *Sunday, May 17, 2020 at 10:49 PM
>>> *To: *"[email protected]" <[email protected]>
>>> *Subject: *Re: Binding question/issue
>>>
>>>
>>>
>>> Hello in my different tries I put [Bindable] in front of my constant
>>>
>>>
>>>
>>> [Bindable]
>>>
>>> public
>>>
>>> static
>>>
>>> const MAX_CHARS_NOM:int =
>>>
>>> 50;
>>>
>>>
>>>
>>>
>>>
>>> And the error stack disappears when I remove the [Bindable] but it
>>> doesn't solve my issue as the <j:MaxNumberCharacters
>>> maxlength="{MAX_CHARS_NOM}" /> still shows an undefined value
>>>
>>>
>>>
>>> Nicolas
>>>
>>>
>>>
>>> Le lun. 18 mai 2020 à 07:32, Alex Harui <[email protected]> a écrit :
>>>
>>> Interesting.  I wonder if @Greg Dove <[email protected]> has time to
>>> look at this.  He’s been through more of these scenarios than I have.
>>>
>>>
>>>
>>> -Alex
>>>
>>>
>>>
>>> *From: *Nicolas Aguttes <[email protected]>
>>> *Reply-To: *"[email protected]" <[email protected]>
>>> *Date: *Sunday, May 17, 2020 at 10:24 PM
>>> *To: *"[email protected]" <[email protected]>
>>> *Subject: *Re: Binding question/issue
>>>
>>>
>>>
>>> Hello Alex,
>>>
>>>
>>>
>>> this is the {MAX_CHARS_NOM} in my TextInput which is undefined and yes
>>> there is an error
>>>
>>>
>>>
>>>
>>>
>>> TypeError: this.dispatcher is undefinedSimpleBinding.js:228:3
>>>
>>>     set__strand
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/binding/SimpleBinding.js
>>> :228
>>>
>>>     addBead
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/core/ElementWrapper.js
>>> :120
>>>
>>>     addBead
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/core/HTMLElementWrapper.js
>>> :50
>>>
>>>     addBead
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/core/UIBase.js
>>> :378
>>>
>>>     prepareCreatedBinding
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/binding/DataBindingBase.js
>>> :79
>>>
>>>     initBindingsHandler
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/binding/ViewDataBinding.js
>>> :82
>>>
>>>     <anonyme> self-hosted:844
>>>
>>>     fireListeners
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/events/EventDispatcher.js
>>> :117
>>>
>>>     dispatchEventInternal_
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/library/closure/goog/events/eventtarget.js
>>> :382
>>>
>>>     dispatchEvent
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/events/EventDispatcher.js
>>> :80
>>>
>>>     dispatchEvent
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/core/ElementWrapper.js
>>> :243
>>>
>>>     addedToParent
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/jewel/View.js
>>> :70
>>>
>>>     addElement
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/core/UIBase.js
>>> :405
>>>
>>>     addElement
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/core/GroupBase.js
>>> :165
>>>
>>>     initializeStrandBasedObject
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/utils/MXMLDataInterpreter.js
>>> :241
>>>
>>>     generateMXMLArray
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/utils/MXMLDataInterpreter.js
>>> :127
>>>
>>>     generateMXMLInstances
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/utils/MXMLDataInterpreter.js
>>> :271
>>>
>>>     addedToParent
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/jewel/View.js
>>> :69
>>>
>>>     addElement
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/core/UIBase.js
>>> :405
>>>
>>>     addElement
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/core/GroupBase.js
>>> :165
>>>
>>>     initializeStrandBasedObject
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/utils/MXMLDataInterpreter.js
>>> :241
>>>
>>>     generateMXMLArray
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/utils/MXMLDataInterpreter.js
>>> :127
>>>
>>>     generateMXMLInstances
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/utils/MXMLDataInterpreter.js
>>> :271
>>>
>>>     addedToParent
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/jewel/View.js
>>> :69
>>>
>>>     addElement
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/jewel/Application.js
>>> :144
>>>
>>>     initialize
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/jewel/Application.js
>>> :295
>>>
>>>     start
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/org/apache/royale/jewel/Application.js
>>> :264
>>>
>>>     <anonyme>
>>> file:///Users/nicolasA/Documents/dev/ApacheRoyale/TestBinding/bin/js-debug/TestBinding.html
>>> :155
>>>
>>>
>>>
>>> Le lun. 18 mai 2020 à 07:17, Alex Harui <[email protected]> a écrit :
>>>
>>> What value is undefined?  Is there a call stack or error message?
>>>
>>>
>>>
>>> -Alex
>>>
>>>
>>>
>>> *From: *Nicolas Aguttes <[email protected]>
>>> *Reply-To: *"[email protected]" <[email protected]>
>>> *Date: *Sunday, May 17, 2020 at 10:09 PM
>>> *To: *"[email protected]" <[email protected]>
>>> *Subject: *Re: Binding question/issue
>>>
>>>
>>>
>>> Hello Alex,
>>>
>>> Thanks for your reply, I tried what you suggested and added addBead(new
>>> ContainerDataBinding()) to the constructor, I also tried to add to the
>>> Ecran1.mxml the
>>> <j:beads>
>>> <js:ContainerDataBinding/>
>>> </j:beads>
>>>
>>> And read the different example provided Carlos and tried to mimic
>>> them,but I still get an undefined
>>> value when I execute the application.
>>>
>>>
>>>
>>> Le dim. 17 mai 2020 à 08:19, Alex Harui <[email protected]> a écrit :
>>>
>>> Hi Nicolas,
>>>
>>>
>>>
>>> Looks like you are using the Jewel component set, so you may need to add
>>> ContainerDataBinding to the screens.  Different MXML files can have
>>> different binding implementation for performance reasons and there may not
>>> be one specified by default for PAYG reasons.
>>>
>>>
>>>
>>> You can do that by adding the ContainerDataBinding bead to the MXML
>>> files for screens where you have binding expressions in the same way you
>>> added ApplicationDataBinding to the main app, or if Ecran1Class is only
>>> used as the top tag in an MXML file, then it should be safe to just add the
>>> ContainerDataBinding bead in the Ecran1Class constructor.
>>>
>>>
>>>
>>> public function Ecran1Class()
>>> {
>>> super();
>>>
>>> addBead(new ContainerDataBinding());
>>> }
>>> }
>>>
>>>
>>>
>>> HTH,
>>>
>>> -Alex
>>>
>>>
>>>
>>> *From: *Nicolas Aguttes <[email protected]>
>>> *Reply-To: *"[email protected]" <[email protected]>
>>> *Date: *Saturday, May 16, 2020 at 10:31 PM
>>> *To: *"[email protected]" <[email protected]>
>>> *Subject: *Binding question/issue
>>>
>>>
>>>
>>> Good morning all.
>>> I am new to Apache Royale and I don't know how to make binding work
>>> I have my main program which call some screens (ecrans.*)
>>> each screen has its applicationScript where I define some constant that
>>> I would link to bind to the view, it compiles, but the binding doesn't work
>>> and shows undefine value.
>>> I tried with differetn combination of
>>>  <j:beads>
>>>         <js:nnnnDataBinding/>
>>>     </j:beads>
>>> but without success.
>>>
>>> Can someone tell we what I am doing wrong?
>>> Thanks
>>> Nicolas
>>>
>>> Here is a non working extract of my code
>>> ----- Main ----
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <j:Application
>>> xmlns:fx="http://ns.adobe.com/mxml/2009
>>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fns.adobe.com%2Fmxml%2F2009&data=02%7C01%7Caharui%40adobe.com%7C05689a9f276e48c7bb8a08d7faef49a5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637253777955808572&sdata=c921nVJQ7u3iaEa9dd90PlvLZFPBQv5yuQ%2FsHE4SYOM%3D&reserved=0>"
>>>
>>> xmlns:ecrans="ecrans.*"
>>> xmlns:j="library://ns.apache.org/royale/jewel
>>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fns.apache.org%2Froyale%2Fjewel&data=02%7C01%7Caharui%40adobe.com%7C05689a9f276e48c7bb8a08d7faef49a5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637253777955818567&sdata=kMfzaPRmkwDtNnwBpfkXRbYJFIdjUFe2SG9WsC3rWTs%3D&reserved=0>
>>> "
>>> xmlns:js="library://ns.apache.org/royale/basic
>>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fns.apache.org%2Froyale%2Fbasic&data=02%7C01%7Caharui%40adobe.com%7C05689a9f276e48c7bb8a08d7faef49a5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637253777955818567&sdata=l2WhZz75FeapqIJ21QkCZCo7qeDq8q7%2FnDUWNkJicjo%3D&reserved=0>
>>> "
>>> xmlns:html="library://ns.apache.org/royale/html
>>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fns.apache.org%2Froyale%2Fhtml&data=02%7C01%7Caharui%40adobe.com%7C05689a9f276e48c7bb8a08d7faef49a5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637253777955828561&sdata=FSxFBfXTWw%2F1z637bU%2BzSJIzneEhBQV%2FlLHgIwBVWfo%3D&reserved=0>
>>> "
>>> width="100%"
>>> height="100%">
>>>    <j:beads>
>>>         <js:ApplicationDataBinding/>
>>>     </j:beads>
>>> <j:initialView>
>>>    <j:View id="vuePrincipale" width="100%" height="100%">
>>> <j:View id="EcranBox" width="100%" height="100%">
>>> <ecrans:Ecran1 id="Ecran1" />
>>>     </j:View>
>>>
>>> </j:View>
>>> </j:initialView>
>>> </j:Application>
>>>
>>> ----- Scren 1 .mxml  ------
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <ecrans:Ecran1Class
>>> xmlns:fx="http://ns.adobe.com/mxml/2009
>>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fns.adobe.com%2Fmxml%2F2009&data=02%7C01%7Caharui%40adobe.com%7C05689a9f276e48c7bb8a08d7faef49a5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637253777955828561&sdata=jkvBTJc0hr87M0L2ZeMBr6xjzMIk7t6YfB6ll9rJt0A%3D&reserved=0>
>>> "
>>> xmlns:ecrans = "ecrans.*"
>>> xmlns:j="library://ns.apache.org/royale/jewel
>>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fns.apache.org%2Froyale%2Fjewel&data=02%7C01%7Caharui%40adobe.com%7C05689a9f276e48c7bb8a08d7faef49a5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637253777955838559&sdata=WYYtseVJsjkkAQhKMTfSfst2GfjW5AYODm9Ko6oUJSU%3D&reserved=0>
>>> "
>>> xmlns:html="library://ns.apache.org/royale/html
>>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fns.apache.org%2Froyale%2Fhtml&data=02%7C01%7Caharui%40adobe.com%7C05689a9f276e48c7bb8a08d7faef49a5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637253777955838559&sdata=4gMaR%2Fl2n5Bhiuqgvkdzzvuc7Rbn3r1nNFEiv3P2YbU%3D&reserved=0>
>>> "
>>> xmlns:js="library://ns.apache.org/royale/basic
>>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fns.apache.org%2Froyale%2Fbasic&data=02%7C01%7Caharui%40adobe.com%7C05689a9f276e48c7bb8a08d7faef49a5%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637253777955848550&sdata=X9uLXFm4Bgb0%2BBi6hT9pCPR2Aa2xQoGz3Rd1p71%2B%2FLU%3D&reserved=0>
>>> "
>>>     >
>>> <j:Form width="100%" height="100%" id="searchForm"  >
>>>
>>> <j:FormItem  id="labelNom"  label="nom :" width="100%" >
>>> <j:TextInput id="nom" >
>>> <j:beads>
>>> <j:MaxNumberCharacters maxlength="{MAX_CHARS_NOM}" />
>>> </j:beads>
>>> </j:TextInput>
>>> </j:FormItem>
>>> </j:Form>
>>> </ecrans:Ecran1Class>
>>>
>>>
>>> ----- screen 1 .as  --------
>>> package ecrans
>>> {
>>> import org.apache.royale.jewel.View;
>>>
>>> public class Ecran1Class extends View
>>> {
>>> // Proprietes
>>> [Bindable] public static const MAX_CHARS_NOM:int = 50;
>>>
>>> // Constructeur
>>> public function Ecran1Class()
>>> {
>>> super();
>>> }
>>> }
>>>
>>>

Reply via email to