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