MXML を使用せずに Flex フレームワーク/コンポーネントを使用することはできますか?

StackOverflow https://stackoverflow.com/questions/141288

質問

MXML を使用せずに Flex フレームワークとコンポーネントを使用することはできますか?私は ActionScript についてはかなりよく知っていますが、単純な UI を組み込むためだけに新しい XML 言語をいじる気は​​ありません。コンパイル可能で (理想的には FlashDevelop 経由ですが、Flex SDK での方法を説明するだけでも構いません)、Flex Framework を使用する .as ファイルで構成される例を提供できる人はいますか?たとえば、アラートを開く Flex ボタンを表示するだけで完璧です。

それが不可能な場合、カスタム AS クラスをブートストラップして Flex SDK にアクセスできる最小限の MXML ファイルを誰かが提供してもらえますか?

役に立ちましたか?

解決

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!");
        }
    }
}

他のヒント

これは、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 (これは、次のような MXML クラスです。 <mx:Application> ルートノードはとにかくコンパイルされます):

package {

  import mx.core.Application;


  public class MyFancyApplication extends Application {

    // do whatever you want here

  }

}

また、 mxmlc コンパイラ (または Flash CS3 オーサリング ツールでさえ) は Flex クラスを使用できます。クラスパスでそれらのクラスを使用できるようにするだけです (使用時にフレームワーク SWC を参照します)。 mxmlc または、どちらかを使用する場合はソースを含むフォルダーを指します)。ドキュメントクラスが継承していない限り、 mx.core.Application ただし、フレームワークの一部ではこれが事実であると想定されているため、何らかの問題が発生する可能性があります。

はい、クラスパスに flex swc を含める必要があるだけです。flex.swc は、frameoworks/lib/flex.swc の flex SDK にあります。

編集:もう一つ:Flex Builder を使用している場合は、新しい ActionScript プロジェクトを作成するだけで、基本的に上記と同じ処理が行われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top