是否可以在不使用MXML的情况下使用Flex Framework / Components?
是否可以在不使用MXML的情况下使用Flex框架和组件?我非常了解ActionScript,并且不想为了获得一些简单的UI而搞弄一些新的XML语言。谁能提供一个包含.as文件的示例,该文件可以进行编译(理想情况下是通过FlashDevelop,尽管也可以通过Flex SDK告诉它如何操作)并使用Flex框架?例如,仅显示弹出时将弹出"警报"的Flex按钮将是完美的。
如果不可能,那么有人可以提供一个最小的MXML文件,该文件将引导自定义AS类,然后该类可以访问Flex SDK吗?
解决方案
是的,我们只需要在类路径中包含flex swc。我们可以在frameoworks / lib / flex.swc中的flex sdk中找到flex.swc
编辑:还有一件事:如果我们使用的是Flex Builder,则可以简单地创建一个新的ActionScript项目,该项目基本上与上述操作相同。
这是一个非常简单的应用程序,仅执行MXML中的基本引导程序。这是MXML:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()"> <mx:Script source="Script.as" /> </mx:Application>
这是Script.as:
import mx.controls.Button; import flash.events.MouseEvent; import mx.controls.Alert; import mx.core.Application; private function onCreationComplete() : void { var button : Button = new Button(); button.label = "Click me"; button.addEventListener(MouseEvent.CLICK, function(e : MouseEvent) : void { Alert.show("Clicked"); }); Application.application.addChild(button); }
注意:除非我们首先初始化Flex库,否则以下答案将无法实际使用。为此需要涉及很多代码。请参阅下面的评论或者其他答案以获取更多详细信息。
主类甚至不必在MXML中,只需创建一个继承自mx.core.Application
的类(无论如何,根节点为<mx:Application>的MXML类都会被编译为该类) :
package { import mx.core.Application; public class MyFancyApplication extends Application { // do whatever you want here } }
同样,任何使用mxmlc
编译器甚至Flash CS3创作工具编译的ActionScript代码都可以使用Flex类,这只是使它们在类路径中可用的问题(使用mxmlc
时引用框架SWC或者使用任何一种时都指向包含源的文件夹)。除非文档类从mx.core.Application
继承,否则我们可能会遇到一些麻烦,因为框架中的某些情况都认为是这种情况。
我做了一个类似于Borek的简单引导程序(见下文)。我很想摆脱mxml文件,但是如果我没有它,我将不会得到Flex附带的任何标准主题(haloclassic.swc等)。有人知道如何按照Theo的建议去做,但仍然应用了标准主题吗?
这是我简化的引导方法:
main.mxml
<?xml version="1.0" encoding="utf-8"?> <custom:ApplicationClass xmlns:custom="components.*"/>
ApplicationClass.as
package components { import mx.core.Application; import mx.events.FlexEvent; import flash.events.MouseEvent; import mx.controls.Alert; import mx.controls.Button; public class ApplicationClass extends Application { public function ApplicationClass () { addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete); } private function handleComplete( event : FlexEvent ) : void { var button : Button = new Button(); button.label = "My favorite button"; button.styleName="halo" button.addEventListener(MouseEvent.CLICK, handleClick); addChild( button ); } private function handleClick(e:MouseEvent):void { Alert.show("You clicked on the button!", "Clickity"); } } }
以下是将其与Flex 4结合使用的必要更新:
main.mxml
<?xml version="1.0" encoding="utf-8"?> <local:MyApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="components.*" />
MyApplication.as
package components { import flash.events.MouseEvent; import mx.controls.Alert; import mx.events.FlexEvent; import spark.components.Application; import spark.components.Button; public class MyApplication extends Application { public function MyApplication() { addEventListener(FlexEvent.CREATION_COMPLETE, creationHandler); } private function creationHandler(e:FlexEvent):void { var button : Button = new Button(); button.label = "My favorite button"; button.styleName="halo" button.addEventListener(MouseEvent.CLICK, handleClick); addElement( button ); } private function handleClick(e:MouseEvent):void { Alert.show("You clicked it!", "Clickity!"); } } }