0

这些天我刚开始学习Flex。我只是有一个疑问:下面是代码:

主.mxml

 <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

        <s:layout>

            <s:VerticalLayout paddingLeft="10" paddingTop="10"/>
        </s:layout>

        <fx:Style source="Styles.css" />

        <fx:Script>
            <![CDATA[
                import components.NameDisplay;

                import spark.skins.spark.DefaultComplexItemRenderer;
                import spark.skins.spark.DefaultItemRenderer;

                private function rendererFunction(item: Object): ClassFactory
                {
                    if(item is String)
                        return new ClassFactory(NameDisplay);
                    else
                        return new ClassFactory(DefaultComplexItemRenderer);
                }
            ]]>
        </fx:Script>

        <fx:Declarations>

            <s:ArrayList id="employeeList">
                <fx:String>Samuel Ang</fx:String>
                <s:BitmapImage source="images/sang.jpg"/>

                <fx:String>Athena Parker</fx:String>
                <s:BitmapImage source="images/aparker.jpg"/>

                <fx:String>Saul Tucker</fx:String>
                <s:BitmapImage source="images/stucker.jpg"/>

                <fx:String>Alyssa Le</fx:String>
                <s:BitmapImage source="images/ale.jpg"/>
            </s:ArrayList>


        </fx:Declarations>


        <s:Label text="Employee Portal: Employee Directory"
                 styleName="titleHeader"/>

        <s:DataGroup dataProvider="{employeeList}"
                     itemRendererFunction="rendererFunction">

            <s:layout>
                <s:VerticalLayout paddingLeft="15" paddingTop="15"/>
            </s:layout>

        </s:DataGroup>


    </s:Application>

名称显示.mxml

 <?xml version="1.0" encoding="utf-8"?>
    <s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx" 
                    autoDrawBackground="true">
        <fx:Declarations>
            <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>

        <s:Label text="{data}"
                 width="74" height="30"
                 backgroundColor="#000000" 
                 color="#FFFFFF" 
                 textAlign="center" 
                 verticalAlign="middle" />

    </s:ItemRenderer>

我的疑惑:

1)我的“rendererFunction”代码如何在最后返回 ItemRenderer?我的意思是 ClassFactory 如何返回 ItemRenderer 对象?我检查了 ClassFactory.as 代码,我看到了 newInstance() 方法(它是从 IFactory 接口实现的),那么 ClassFactory 如何自动调用 newInstance() 方法(实际上,我猜测我正在通过 newInstance() 方法获取 ItemRenderer 对象)

2)在 DisplayName.mxml 代码中:<s:Label text="{data}",我发现这个“数据”来自 DataRenderer.as,但我不明白它是如何获得价值的,从哪里获得价值??

3)我听很多人说Flex是Java开发的,对吗?如果是,为什么我在 Flex 源代码中甚至没有找到一个 java 文件?

4)现在,Apache 是 Fl​​ex 的所有者,那么为什么 Flex API 仍然显示为“Adobe”?(问这个只是为了了解自己)

对不起,如果他们是愚蠢的查询!

等待回复!

4

1 回答 1

0

1) 我的“rendererFunction”代码如何在最后返回 ItemRenderer?我的意思是 ClassFactory 如何返回 ItemRenderer 对象?

我不确定你在这里真正问的是什么,但我会试试的。我相信它是这样发生的:

1)DataGroup需要一个itemRenderer来显示一些数据

2) DataGroup 检查是否存在 itemRendererFunction。如果是的话;它调用函数。该函数返回一个 ClassFactory

3) ClassFactory 用于在DataGroup 内部创建一个新实例。我假设调用了 newInstance() 方法;但我没有审查编写此代码的代码。

4) DataGroup 在新的渲染器实例上设置数据属性。我假设它还将渲染器实例存储在某处。

5) 渲染器实例被添加为 DataGroup 的子项

在一天结束时;您必须深入研究 Flex 框架代码才能找出问题的答案。

2) 在 DisplayName.mxml 代码中:

DataGroup 将在渲染器上设置数据属性。它与来自 DataGroup 的 dataProvider 的项目相关。

3)我听很多人说Flex是Java开发的,对吗?如果是,为什么我在 Flex 源代码中甚至没有找到一个 java 文件?

Flex 编译器是用 Java 构建的。Flex 框架都是 ActionScript。

4) 现在,Apache 是 Fl​​ex 的所有者,那么为什么 Flex API 仍然显示为“Adobe”?(问这个只是为了了解自己)

主要是出于向后兼容性的原因。我相信 Apache Flex SDK 包括不在 Adob​​e 命名空间中的新类。

于 2013-08-07T20:31:49.623 回答