Apache flex 如何访问<;中的组件;外汇:申报>;在MXML类中?

Apache flex 如何访问<;中的组件;外汇:申报>;在MXML类中?,apache-flex,flex4,mxml,Apache Flex,Flex4,Mxml,是否可以在MXML类中作为IFactory访问声明的组件?我已经多次使用这种方式为蒙皮部件声明工厂,但我从未想过如何从MXML中访问这些工厂 下面是一个我期望工作的例子: <fx:Declarations> <fx:Component id="labelDisplay"> <s:Label fontSize="12" fontWeight="bold"/> </fx:Component> </fx:Declar

是否可以在MXML类中作为IFactory访问声明的组件?我已经多次使用这种方式为蒙皮部件声明工厂,但我从未想过如何从MXML中访问这些工厂

下面是一个我期望工作的例子:

<fx:Declarations>
    <fx:Component id="labelDisplay">
        <s:Label fontSize="12" fontWeight="bold"/>
    </fx:Component>
</fx:Declarations>

<fx:Script>
    <![CDATA[
        override protected function createChildren():void
        {
            super.createChildren();

            var label1:Label = labelDisplay.newInstance();
            addElement(label1);

            var label2:Label = labelDisplay.newInstance();
            addElement(label2);

            var label3:Label = labelDisplay.newInstance();
            addElement(label3);
        }
    ]]>
</fx:Script>

在Spark蒙皮体系结构中,在什么情况下会转变为IFactory

我看到的问题是您没有创建iFactory,因此无法访问iFactory方法

我建议您使用ActionScript,如果需要的话,可以创建一个iFactory。这使用了类


那么您的createChildren代码应该按原样工作

我看到的问题是您没有创建iFactory,因此无法访问iFactory方法

我建议您使用ActionScript,如果需要的话,可以创建一个iFactory。这使用了类


那么您的createChildren代码应该按原样工作

我深入研究了Flex的SkinnableComponent,根据他们如何将MXML皮肤绑定到AS HostComponent来找到解决方案。显然,即使“labelDisplay”没有作为具体的类成员出现在FlashBuilder的autocomplete中,您仍然可以将其作为动态属性引用。我在这里修改了我的原始示例:

<fx:Declarations>
    <fx:Component id="labelDisplay">
        <s:Label fontSize="12" fontWeight="bold"/>
    </fx:Component>
</fx:Declarations>

<fx:Script>
    <![CDATA[
        override protected function createChildren():void
        {
            super.createChildren();

            var labelFactory:ClassFactory = this["labelDisplay"];

            var label1:Label = labelFactory.newInstance();
            addElement(label1);

            var label2:Label = labelFactory.newInstance();
            addElement(label2);

            var label3:Label = labelFactory.newInstance();
            addElement(label3);
        }
    ]]>
</fx:Script>

我深入研究了Flex的Skinnable组件,根据它们如何将MXML皮肤绑定到AS HostComponent来找到解决方案。显然,即使“labelDisplay”没有作为具体的类成员出现在FlashBuilder的autocomplete中,您仍然可以将其作为动态属性引用。我在这里修改了我的原始示例:

<fx:Declarations>
    <fx:Component id="labelDisplay">
        <s:Label fontSize="12" fontWeight="bold"/>
    </fx:Component>
</fx:Declarations>

<fx:Script>
    <![CDATA[
        override protected function createChildren():void
        {
            super.createChildren();

            var labelFactory:ClassFactory = this["labelDisplay"];

            var label1:Label = labelFactory.newInstance();
            addElement(label1);

            var label2:Label = labelFactory.newInstance();
            addElement(label2);

            var label3:Label = labelFactory.newInstance();
            addElement(label3);
        }
    ]]>
</fx:Script>


我只是将其与如果上述MXML是皮肤,代码的解释方式进行比较。如果是这样,那么在我的主机组件中,我可以有以下内容(如下)。在Spark skinning体系结构中,在什么情况下会转变为IFactory?”[SkinPart(required=“true”,type=“spark.controls.Label”)]”公共变量标签显示:IFactory;'蒙皮部分是组件的可视部分;而且IFactory不是一个视觉作品;它是一个创建其他类的类。即使你正在创造一个皮肤;我仍然会在ActionScript中定义IFactory。如果要在component类中定义IFactory;您可以使用hostComponent属性从皮肤类访问它。如果您想了解更多,请仔细阅读List类和ListSkin代码。我发现我试图做的似乎不正确。这里更清楚的是,在AS中创建一个IFactory并在AS中使用它。但是,我希望从IFactory获得一个完全定制的标签,其中包含已填写的字体、大小、颜色和位置信息。使用MXML声明所有这些内容简单得多。@Jeff没有理由不能创建一个包含字体、大小、颜色和位置信息的自定义标签组件;然后使用这个新组件作为ClassFactory创建的类。我只是将其与如果上面的MXML是一个皮肤,代码的解释方式进行比较。如果是这样,那么在我的主机组件中,我可以有以下内容(如下)。在Spark skinning体系结构中,在什么情况下会转变为IFactory?”[SkinPart(required=“true”,type=“spark.controls.Label”)]”公共变量标签显示:IFactory;'蒙皮部分是组件的可视部分;而且IFactory不是一个视觉作品;它是一个创建其他类的类。即使你正在创造一个皮肤;我仍然会在ActionScript中定义IFactory。如果要在component类中定义IFactory;您可以使用hostComponent属性从皮肤类访问它。如果您想了解更多,请仔细阅读List类和ListSkin代码。我发现我试图做的似乎不正确。这里更清楚的是,在AS中创建一个IFactory并在AS中使用它。但是,我希望从IFactory获得一个完全定制的标签,其中包含已填写的字体、大小、颜色和位置信息。使用MXML声明所有这些内容简单得多。@Jeff没有理由不能创建一个包含字体、大小、颜色和位置信息的自定义标签组件;然后将该新组件用作ClassFactory创建的类。
<fx:Declarations>
    <fx:Component id="labelDisplay">
        <s:Label fontSize="12" fontWeight="bold"/>
    </fx:Component>
</fx:Declarations>

<fx:Script>
    <![CDATA[
        override protected function createChildren():void
        {
            super.createChildren();

            var labelFactory:ClassFactory = this["labelDisplay"];

            var label1:Label = labelFactory.newInstance();
            addElement(label1);

            var label2:Label = labelFactory.newInstance();
            addElement(label2);

            var label3:Label = labelFactory.newInstance();
            addElement(label3);
        }
    ]]>
</fx:Script>