"content" is a container with several sub-components and one of them is a 
container called "contentScopeFilter" and it will be, within it, where we add 
the components (if they implement IAssignScopeFilter)

-----Mensaje original-----
De: Yishay Weiss <yishayj...@hotmail.com> 
Enviado el: martes, 7 de mayo de 2024 7:43
Para: dev@royale.apache.org
Asunto: Re: Extend component mxml

                content.contentScopeFilter.addElement(c,dispatchEvent);
                content.contentScopeFilter.dispatchEvent(new 
Event("layoutNeeded"));

Why are you referencing content.contentScopeFilter instead of 
this.contentScopeFilter ?
________________________________
From: Maria Jose Esteve <mjest...@iest.com>
Sent: Tuesday, May 7, 2024 12:25 AM
To: dev@royale.apache.org <dev@royale.apache.org>
Subject: Extend component mxml

Hello, let's see if anyone can give me “some clue” about my problem:

I have made many “base components” “.as” that I have then extended in several 
mxml with success; Now I wanted to extend an mxml and I am having problems "add 
components" because when "override addElement" is executed, in the extended 
mxml component, the mxml elements that I use as a template are not yet created. 
I'll give you an example because I don't know if I'm explaining myself well:

Success case, ".mxml" extended from ".as":


// ---- ModuleAssignTargetToScopeSectionContent.as 
---------------------------------------

public class ModuleAssignTargetToScopeSectionContent extends SectionContent {

        import com.xxx.xxx.models.ConfigModel;
       …

        public function ModuleAssignTargetToScopeSectionContent() {
            super();
            addEventListener("beadsAdded", beadsAddedHandler);
        }

        [Bindable]
        [Inject(source="configModel", required="true")]
        public var configModel:ConfigModel;

        public var carFilter:IAssignScopeFilter;
        public var carUnAssign:IUnAssignScope;
        public var carAssign:IAssignScope;

        public var header:HeaderModuleAssignTargetToScope = new 
HeaderModuleAssignTargetToScope();
        public var content:ContentModuleAssignTargetToScope = new 
ContentModuleAssignTargetToScope(); //ex. VGroup

        protected function beadsAddedHandler(event:Event):void
        {
            removeEventListener("beadsAdded", beadsAddedHandler);
            if (getBeadByType(DataBindingBase) == null)
                addBead(new ViewDataBinding());

            strandChildren.addElement(content);
        }

        override public function addElement(c:IChild, dispatchEvent:Boolean = 
true):void
        {
            if( c is IAssignScopeFilter )
            {
                carFilter = c as IAssignScopeFilter;
                carFilter.moduleModel = moduleModel;

                // content.contentScopeFilter --> Card
                content.contentScopeFilter.addElement(c,dispatchEvent);
                content.contentScopeFilter.dispatchEvent(new 
Event("layoutNeeded"));
            }
            else if( c is IUnAssignScope ){
                …

            }else{
                super.addElement(c, dispatchEvent);
            }
        }

        override public function getElementIndex(c:IChild):int
        {
            if( c is IAssignScopeFilter )
            {
                return content.contentScopeFilter.getElementIndex(c);
            }
            else if( c is IUnAssignScope ){
                …
            }
            return super.getElementIndex(c);
        }

        override public function removeElement(c:IChild, dispatchEvent:Boolean 
= true):void
        {
            if( c is IAssignScopeFilter )
            {
               content.contentScopeFilter.removeElement(c,dispatchEvent);
            }
            else if( c is IUnAssignScope ){
                …
            }
           super.removeElement(c, dispatchEvent);
        }
       …
    }



// ---- AssignTargetToScopePerson.mxml ---------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<wp:ModuleAssignTargetToScopeSectionContent
    xmlns="http://www.w3.org/1999/xhtml";
    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:html="library://ns.apache.org/royale/html"
    xmlns:wp="library://ns.xxx.com/xxx"
    xmlns:viewsAssign="com.xxx.xxx.views.assignation.*">

    <fx:Script>
        <![CDATA[
             …
        ]]>
    </fx:Script>

    <!-- implements "….supportClasses.IAssignScopeFilter" -->
    <viewsAssign:PanelAssignScopePersonFilter localId="carFiltroPersonal" 
percentWidth="100" percentHeight="100" />

    <!-- implements "….supportClasses.IUnAssignScope" -->
    <viewsAssign:PanelUnAssignScopePerson localId="carUnAssignPersonal" 
percentWidth="100" percentHeight="100"
    typeAssignment="{UtilConstants.CONST_TYPE_UNASSIGN}"/>

    <!-- implements "….supportClasses.IAssignScope" -->
    <viewsAssign:PanelAssignScopePerson localId="carAssignPersonal" 
percentWidth="100" percentHeight="100"
    typeAssignment="{UtilConstants.CONST_TYPE_ASSIGN}"/>

</wp:ModuleAssignTargetToScopeSectionContent>


Option that does not work, “.mxml” extended from another “.mxml”:


// ---- ModuleAssignTargetToScopeSectionContent.mxml 
---------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<j:SectionContent
    xmlns=http://www.w3.org/1999/xhtml
    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:html="library://ns.apache.org/royale/html"
    xmlns:wp="library://ns.xxx.com/xxx">

    <fx:Script>
        <![CDATA[

        override public function addElement(c:IChild, dispatchEvent:Boolean = 
true):void
        {
            if( c is IAssignScopeFilter )
            {
                carFilter = c as IAssignScopeFilter;
                carFilter.moduleModel = moduleModel;

                content.contentScopeFilter.addElement(c,dispatchEvent);
                content.contentScopeFilter.dispatchEvent(new 
Event("layoutNeeded"));
            }
            …
        }

        override public function getElementIndex(c:IChild):int
        {
            if( c is IAssignScopeFilter )
            {
                return content.contentScopeFilter.getElementIndex(c);
            }
            …
        }

        override public function removeElement(c:IChild, dispatchEvent:Boolean 
= true):void
        {
            if( c is IAssignScopeFilter )
            {
               content.contentScopeFilter.removeElement(c,dispatchEvent);
            }
            …
        }
       …
        ]]>
    </fx:Script>

<j:beads>
    <js: ViewDataBinding/>
</j:beads>

        <j:VGroup localId="content" percentHeight="100" percentWidth="100">

            <j:Card localId="contentScopeFilter" 
itemsVerticalAlign="itemsCenter" itemsHorizontalAlign="itemsRight">


            </j:Card>

            …

        </j:VGroup>
</j:SectionContent>




// ---- AssignTargetToScopePerson2.mxml ---------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<wp:ModuleAssignTargetToScopeSectionContent
    xmlns=http://www.w3.org/1999/xhtml
    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:html="library://ns.apache.org/royale/html"
    xmlns:wp="library://ns.xxx.com/xxx"
    xmlns:viewsAssign="com.xxx.xxx.views.assignation.*">

    <fx:Script>
        <![CDATA[
             …
        ]]>
    </fx:Script>

    <!-- implements "….supportClasses.IAssignScopeFilter" -->
    <viewsAssign:PanelAssignScopePersonFilter localId="carFiltroPersonal" 
percentWidth="100" percentHeight="100" />

    <!-- implements "….supportClasses.IUnAssignScope" -->
    <viewsAssign:PanelUnAssignScopePerson localId="carUnAssignPersonal" 
percentWidth="100" percentHeight="100"
    typeAssignment="{UtilConstants.CONST_TYPE_UNASSIGN}"/>

    <!-- implements "….supportClasses.IAssignScope" -->
    <viewsAssign:PanelAssignScopePerson localId="carAssignPersonal" 
percentWidth="100" percentHeight="100"
    typeAssignment="{UtilConstants.CONST_TYPE_ASSIGN}"/>

</wp:ModuleAssignTargetToScopeSectionContent>


The problem, as you have surely guessed, is that in 
“AssignTargetToScopePerson2.mxml” the elements of the extended component 
(viewsAssign:PanelAssignScopePersonFilter,…) are added before the elements of 
the base component (content, contentScopeFilter,…)

How should I do it?
Any example I can investigate in the SDK?
If you see any “aberration” in the lines I have attached, please tell me 😝

Any help would be appreciated.

Thx.
Hiedra





Reply via email to