从AS类访问<mx:Image>

问题描述

| 我想在.mxml文件中的ѭ0上绘制一些内容,但我想将绘图实现保留在单独的AS类中。 如何在.mxml中访问我的绘图AS类?     

解决方法

我认为您要问的是如何使动作脚本文件与包含设计的MXML文件分开。答案很简单: 创建您的动作脚本文件。此文件中仅包含方法,请勿将代码包装为
package
class
定义。该文件应如下所示:
import mx.controls.Alert;

// ActionScript file
/**
 *
 * Created By jviers
 * Created on Apr 14,2011
 * 
 *
 */

public function hello():Alert{
    Alert.show(\"Hello World!\");
}
创建包含\“ Design \”组件的MXML文件。在此mxml文件上创建一个
Script
元素,并将源设置为ActionScript文件的相对路径。 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\">

    <fx:Script>
        <![CDATA[
            protected function button1_clickHandler ( event : MouseEvent ) : void {
                // TODO Auto-generated method stub
                hello ();
            }
        ]]>
    </fx:Script>

    <fx:Declarations>

        <!-- Place non-visual elements (e.g.,services,value objects) here -->
    </fx:Declarations>

    <fx:Script source = \"./scratch/MyFile.as\" />

    <s:Button label = \"Show Alert\" click = \"button1_clickHandler(event)\" />
</s:Application>
您会注意到,在运行应用程序时,将执行run6中的ActionScript。 您可以使用此方法在应用程序中包括绘图逻辑。外部ActionScript被视为MXML生成的类的方法定义。 在所有人跳过我之前,让我警告您。这不是最佳实践。在特定的用例中,可以使用Flex的此功能。在我接触他们之前,让我解释一下为什么将“逻辑”与“视图”分开的概念是不正确的。 Flex MXML文件不是仅查看代码。它们是简化ActionScript类定义的声明性方言。使用mxmlc或compc(分别是用于Flex应用程序和组件库的编译器程序)编译Flex Project时,MXML文件将被预编译为ActionScript类定义。如果在Flash / Flex Builder / Ant /命令行编译命令中的编译器选项中添加“ 7”指令,则编译器会将生成的类保留为从项目中的声明性MXML文件派生的ActionScript类。因此,MXML文件成为一个类。 在MXML的Script块中定义ActionScript不会将\“ logic \”与\“ presentation \”混合在一起。同样,MXML也不定义项目的表示形式。它只是ActionScript语言的声明性子集,使定义演示文稿类更容易。作为证明,您可以在MXML中定义ArrayCollections,String和Vector。这些类是数据容器,与表示完全无关。 现在,将所有ActionScript放入外部文件中并不是一件好事,原因是这使维护项目变得头疼。不仅有人必须查找您在MXML中定义的组件,而且现在他们还必须遍历代码库来查找名为Logic。的脚本(相对于您的组件而言是相对定义的)。 以下是通过Script.source包括外部ActionScript的用例: 一组预定义的方法/属性无需更改即可用于许多组件中。无需将这些方法复制并粘贴到每个组件中,而是使用Script.source属性一次定义方法并在整个应用程序中引用它们。 与用例1类似,但不同:您需要混合。像接口一样,混入是必须定义的一组方法才能使组件正常工作,并且这些方法必须可重用并定义显式的输入参数和输出参数。与接口不同,这些方法可以是任何名称空间类型:受保护的,最终的,公共的,内部的,mx_internal等,并且可以是函数体,即在
{}
函数块中具有代码。对于“混入”的示例,我们想到一个可枚举的对象,该对象具有next(),previous(),reset()和iterator()方法。当您要遍历对象的属性时,可以调用iterator(),它返回一个迭代器对象,该对象调用next()和previous()来从对象中获取下一个和上一个属性值。您可以将此功能混合到各种对象中,并有效地使用它们。另外,您所包含的功能已封装在所包含的类中。它的工作方式类似于AS3中的include指令。 希望这有助于您对Flex中的“逻辑”和“表示形式”有所了解,并帮助您解决特定的问题。     ,我想你倒退了。如果使用
<mx:script>
标签将
.as
文件包含在
.mxml
中,则可以看到其中定义的功能。 要处理图像,请将其设置为id属性。从那时起,它变得可寻址,就好像它是使用ActiveScript这样定义的一样
 var image:Image = new Image()
    ,您正在谈论的MXML和AS类之间的关系不是很明显,但是最简单的方法是在MXML中创建返回Image的公共方法。像这样:
…
<mx:Script>
<![CDATA[
public function getImage():Image
{
    return myImage;
}
]]>
</mx:Script>
<mx:Image id=\"myImage\" />
…
因此,只要可以从AS引用MXML,就可以调用此方法。     ,如果要使用自己的绘图类在图像中绘制某些东西,我建议您将其添加到绘图类的构造函数中,如下所示:
/*********************************************
* Variables
*********************************************/
private var _myImageIWantToDrawIn:Image;

/*********************************************
*   Properties
*********************************************/
public function set image(value:Image):void
{
    _myImageIWantToDrawIn = value;
}

public function get image():Image
{
    return _myImageIWantToDrawIn;
}

/*********************************************
* Constructor
*********************************************/
public function myDrawingclass(imageYouWantToDrawIn:Image)
{
    _myImageIWantToDrawIn = imageYouWantToDrawIn;   
}
这样,您随时可以访问该类中的图像并根据需要进行绘制。 (如果要以编程方式进行绘制,也可以访问_myImageIWantToDrawIn.graphics)。如果要在运行时更改图像,则可以添加属性。然后您可以简单地说:myDrawingclass.image = imageYouWantToDrawIn; 编辑:以前的答案实际上与您要问的相反,但是我认为这对您想做的事情是很好的。如果要访问类,只需创建类的实例并向其添加公共方法而不是私有方法即可。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...