19

是否可以在不使用 MXML 的情况下使用 Flex 框架和组件?我非常了解 ActionScript,并且不想为了获得一些简单的 UI 而使用一些新的 XML 语言。谁能提供一个包含可以编译的 .as 文件的示例(最好通过 FlashDevelop,尽管只是告诉如何使用 Flex SDK 也可以)并使用 Flex 框架?例如,只显示一个弹出警报的 Flex 按钮将是完美的。

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

4

4 回答 4

13

我做了一个类似于 Borek 的简单引导程序(见下文)。我很想摆脱 mxml 文件,但如果我没有它,我将无法获得 Flex 附带的任何标准主题(haloclassic.swc 等)。有人知道如何按照 Theo 的建议去做并且仍然应用标准主题吗?

这是我简化的引导方法:

主.mxml

<?xml version="1.0" encoding="utf-8"?>
<custom:ApplicationClass xmlns:custom="components.*"/>

应用程序类.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 中使用它的必要更新:

主.mxml

<?xml version="1.0" encoding="utf-8"?>
<local:MyApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="components.*" />

我的应用程序.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!");
        }
    }
}
于 2008-10-20T19:29:28.633 回答
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);
}
于 2008-09-26T19:46:59.847 回答
7

注意:除非您先初始化 Flex 库,否则下面的答案实际上不会起作用。有很多代码可以做到这一点。有关更多详细信息,请参阅下面的评论或其他答案。


主类甚至不必在 MXML 中,只需创建一个继承自的类(无论如何编译具有根节点mx.core.Application的 MXML 类):<mx:Application>

package {

  import mx.core.Application;


  public class MyFancyApplication extends Application {

    // do whatever you want here

  }

}

此外,任何使用编译器编译的 ActionScript 代码mxmlc- 甚至是 Flash CS3 创作工具 - 都可以使用 Flex 类,只需使它们在类路径中可用(在使用mxmlc或指向文件夹时参考框架 SWC使用其中之一时包含源)。但是,除非文档类从mx.core.Application您那里继承,否则可能会遇到一些麻烦,因为框架中的某些东西假设是这种情况。

于 2008-09-26T20:38:28.757 回答
0

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

编辑:还有一件事:如果您使用的是 Flex Builder,您可以简单地创建一个新的 ActionScript 项目,该项目基本上与上述相同。

于 2008-09-26T19:40:58.317 回答