kagamihogeの日記

kagamihogeの日記です。

Flex のマニフェストファイル

Flex 3 - マニフェストファイルについて

Flex のライブラリ swc を作って、それを参照するときのエイリアスを作るためのもののようだ。以下は Flex Builder でやる場合のメモ。

とりあえずテキトーなクラスを作る。折角なので TextArea を継承してみる。

package hogepackage
{
    import mx.controls.TextArea;
    
    public class HogeClass extends TextArea {}
}

クラスパスの通ってるディレクトリ(じゃなくてもいいんだけど)に Manifest.xml を作る。マニフェストのファイル名は何でもいいっぽい。中身はこんな感じ。

<?xml version="1.0"?>
<componentPackage>
    <component id="kagamihogehoge" class="hogepackage.HogeClass"/>
</componentPackage>

で、プロジェクトのプロパティ -> Flex ライブラリコンパイラ名前空間 URL にテキトーな URL を入れる。とりあえず今回はホントーにテキトーに http://d.hatena.ne.jp/kagamihoge/flextest でw マニフェストファイルには Manifest.xml を。ソースファイルの外つーか上に置く場合は、..\resources\Manifest.xml とかで。

コレで、このライブラリ使う場合は、kagamihogehoge という名前で hogepackage.HogeClass クラスが使えるようになる。

で、テストのため別途 Flex プロジェクトを作る。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:khoge="http://d.hatena.ne.jp/kagamihoge/flextest"
    layout="absolute">
    
    <khoge:kagamihogehoge id="kid" x="0" y="0" width="200" height="200" />
</mx:Application>

xmlns 属性で先ほど入力した名前空間 URL(http://d.hatena.ne.jp/kagamihoge/flextest のこと)を入れる。後はみたまんま。コレを実行すると TextArea が表示される。なるほど。

コレだけだとナンなので。ライブラリ側のクラスに変数を追加した場合、どんな風にアクセスするのかをやってみる。

package hogepackage
{
    import mx.controls.TextArea;
    
    public class HogeClass extends TextArea
    {
        public var a:int;
        
        public var s:String;
        
        public var array:Array;
        
        public var array2:Array;
        
        private var b:int;
        
        public function HogeClass()
        {
        }
        
        public function set valueB(b:int):void {
            this.b = b;
        }
        
        public function get valueB():int {
            return this.b;
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:khoge="http://d.hatena.ne.jp/kagamihoge/flextest"
    layout="absolute"
    applicationComplete="init()">
    
    <khoge:kagamihogehoge id="kid" x="0" y="0" width="200" height="200" visible="true" s="foovar" valueB="20">
        <khoge:a>20</khoge:a>
        <khoge:array>
            nanntoka
        </khoge:array>
        <khoge:array2>
            [nanntoka, kantoka, nonntoka] 
        </khoge:array2>
    </khoge:kagamihogehoge>
    
</mx:Application>

ほほー。タグの属性でも要素でもどっちの書き方でもアクセスできるのね。public プロパティでも get/set でもよしと。

確か mxml で書かれているものも実体は ActionScript なんだよね? つーことは、いつも mx:* なんちゃらで使ってるコンポーネントもこうやって作られてる、ってことか。

> たぶん、UIが必要なのはmxmlで作り
前述のようにMXMLで生成されるUI も元はASで作られていますから、MXMLを使わずともUIは作れます。ただゼロから作るのは大変ですので、簡単に(RIA向けの)UIが作れるよう提供されているのがFlexフレームワークです。MXMLはFlexフレームワークの主にUIを記述するためのXMLの一種、という関係になります。

mxmlとActionScriptの関係 - ActionScript(AS3)やFlexを勉強しようと思ってはじめた日記 - actionscriptグループ のコメント欄より

なるほどー。