可以在不使用MXML的情况下使用Flex Framework / Components吗?

时间:2008-09-26 19:00:47

标签: flex actionscript-3 mxml flashdevelop

是否可以在不使用MXML的情况下使用Flex Framework和组件?我非常了解ActionScript,并且不想乱用一些新的XML语言只是为了获得一些简单的UI。任何人都可以提供一个包含.as文件的例子,该文件可以编译(理想情况下通过FlashDevelop,虽然只是告诉如何使用Flex SDK也可以)并使用Flex Framework?例如,只显示弹出警报的弹出按钮就是完美的。

如果不可能,有人可以提供一个最小的MXML文件来引导自定义AS类,然后可以访问Flex SDK吗?

4 个答案:

答案 0 :(得分:13)

我做了一个类似于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!");
        }
    }
}

答案 1 :(得分:9)

这是一个非常简单的应用程序,仅执行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);
}

答案 2 :(得分:7)

注意:除非您首先初始化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,否则你可能会遇到一些麻烦,因为框架中的某些东西会假设情况就是这样。

答案 3 :(得分:0)

是的,您只需要在类路径中包含flex swc。您可以在frameoworks / lib / flex.swc

中的flex sdk中找到flex.swc

编辑:还有一件事:如果您使用的是Flex Builder,您只需创建一个新的ActionScript项目,该项目基本上与上面相同。