回答
我想你的问题是如何让你的动作文件与包含你的设计的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>
你会发现,在scratch.MyFile.as
动作脚本应用程序运行时执行。
您可以使用此方法将您的绘图逻辑包含在您的应用程序中。外部ActionScript被视为是由MXML生成的类的方法定义。
让我在每个人跳过我之前告诫你。这是不是的最佳做法。有一些特定的用例可以使用Flex的这个特性。在我找到他们之前,让我解释一下为什么将“逻辑”与“视图”分开的概念是不准确的。
Flex MXML文件不是仅查看代码。它们是一种简化ActionScript类定义的声明性方言。当使用mxmlc或compc编译Flex项目(分别是Flex应用程序和组件库的编译器程序)时,MXML文件被预编译为ActionScript类定义。如果您在Flash/Flex Builder/Ant /命令行编译命令中将-keep-generated-actionscript
指令添加到您的编译器选项中,编译器会将生成的组成从指令性MXML文件派生的ActionScript类的类保留在项目中。因此,一个MXML文件成为一个类。
在MXML的脚本块中定义ActionScript是NOT将“逻辑”与“演示文稿”混合在一起。同样,MXML 不是定义您的项目的演示文稿。它只是ActionScript语言的一个声明性子集,可以更容易地定义表示类。作为证明,您可以在MXML中定义ArrayCollections,Strings和Vectors。这些类是数据容器,与演示完全无关。
现在,把所有的ActionScript放在外部文件中的原因是不是一件好事是它使维护您的项目头痛。不仅有人必须查找MXML中定义的组件,而且现在他们必须通过代码库来查找名为Logic.as的脚本,该脚本相对于组件定义。
的使用情况,其中包括通过Script.source的外部ActionScript如下:
- 一组预定义的方法/属性是在大量组分而不改变使用。不是将这些方法复制并粘贴到每个组件中,而是使用Script.source属性定义一次方法并在整个应用程序中引用它们。
- 与use-case-1相似,但不同:需要混合使用。就像一个接口一样,混合输入是一组必须为组件定义的方法,这些方法必须是可重用的,并定义显式输入参数和输出参数。与接口不同,这些方法可以是任何名称空间类型:protected,final,public,internal,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;
}
这样,你可以随时访问如果你想要的话,可以从这个类中抽取图像并在其中绘制。 (如果你想绘制programmaticaly,你也可以访问_myImageIWantToDrawIn.graphics)。如果要在运行时更改图像,可以添加属性。你可以简单地说:myDrawingclass.image = imageYouWantToDrawIn;
编辑:这个以前的答案实际上与你所要求的是相反的,但我认为这对你想做的事情会很好。如果你想访问你的类,只需创建你的类的实例,并添加公共方法,而不是私人的。
和顺便说一句:你的问题在你的标题是你的问题在你的文字的相反。 – 2011-04-14 16:10:40
- 1. 从其他.as文件访问函数
- 2. Ruby类<<自变量,从另一个类访问
- 3. 从类访问Properties.Settings.Default?
- 4. 从子类访问父类
- 5. 从@RequestScoped类访问@SessionScoped类?
- 6. AS3从外部访问变量包含ActionScript文件.AS不是类
- 7. JBoss AS 7.1.1 Final - 访问部署在JBoss AS 6中的EJB
- 8. 访问EJB AS经由注射
- 9. JBOSS 7 AS standalone.sh无法访问jboss-modules.jar
- 10. 访问报告 - Recordsetclone as。记录源
- 11. Python,With ... as ... AST /符号访问
- 12. 无法访问列表<string>从另一个类
- 13. 从外部AS访问MXML中定义的元素
- 14. 从windows机器上使用jconsole远程访问Wildfly AS
- 15. 访问download_url <a>属性从
- 16. 从Cycript访问<objc/runtime.h>
- 17. 从父类访问变量
- 18. 从Spring访问EJB类
- 19. 从子类访问uinavigationbar?
- 20. 从类访问属性 - PHP
- 21. 从子类访问UITableView
- 22. 从随机类访问UIViewController
- 23. 从主类访问变量
- 24. 从其他类访问IBOutlet
- 25. 从类方法访问UINavigationController
- 26. 从类内访问$ _SESSION
- 27. 从其他类访问“currentState”?
- 28. 从COM对象访问类
- 29. 从部分类访问值
- 30. NetBeans:从MyAppView.java访问类
我可以问你准备做什么吗? – 2011-04-14 15:10:40
我想分开我的应用程序的用户界面和逻辑 – Sergey 2011-04-14 17:47:26
那么,绘制一些东西不是UI? – 2011-04-14 17:49:56