Flex において、MXMLが簡単で便利でホットというのは理解できました。
しかし、チュートリアルの方法では、全てのコードを main.mxml に書かなくてはならなくなってしまいます。Action Script のみで開発していた頃は、単純にクラス毎にファイルが分かれていて、コードの管理もしやすかったのですが・・・
むしろ、Action Script 3 で作ったクラスは使えないのでしょうか?それはそれで余りに生産性が勿体無い。(←微妙な日本語)
しかし、チュートリアルの方法では、全てのコードを main.mxml に書かなくてはならなくなってしまいます。Action Script のみで開発していた頃は、単純にクラス毎にファイルが分かれていて、コードの管理もしやすかったのですが・・・
むしろ、Action Script 3 で作ったクラスは使えないのでしょうか?それはそれで余りに生産性が勿体無い。(←微妙な日本語)
新規クラス追加
よく読めば、パッケージの指定や、派生元のスーパークラスは何にするのか、等、理解し難い指定は ありませんね。
ここで、Flex の U/I コンポーネントクラスを元に派生クラスを作るのは簡単なのです。
「.as」ではない、main.mxml にどう記述するのかが判りませんでした。
コンポーネント追加方法
色々検索した結果、判りやすい情報は本家の Adobe のサイトにありました。http://www.adobe.com/support/documentation/jp/flex/
ここからの「Flex 3 開発ガイド >> ActionScript カスタムコンポーネント >> ActionScript のシンプルなビジュアルコンポーネント >> ActionScript コンポーネントについて」と辿ると、詳しく書いてあります。
- まず、as3 でクラスを作る。
mx.core.UIComponent のサブクラスでないと、コンポーネントになれないので、UIComponent 又は、この派生クラスを extends指定する事。
- mx:WindowedApplication タグに、xmlns記述を追加。
作ったas3クラスのパッケージ名を記述する。
「package hoge.hongege」だった場合は「xmlns:ユニークなネームスペース="hoge.hongege.*"」
package に指定がない場合、素直に「xmlns:ユニークなネームスペース="*"」で問題ない。
ユニークなネームスペースは、アルファベット大文字小文字を区別しドットも使える。
具体的には、以下のようなコンポーネントクラスを作った場合、
package
{
import mx.containers.Panel;
/**
* ...
* @author
*/
public class extendsPanel extends Panel
{
public function extendsPanel()
{
title = "カスタムコンポーネント";
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:myCustom="*">
<MyCustom:extendsPanel width="100%" height="100%">
</MyCustom:extendsPanel>
</mx:WindowedApplication>
このカスタムコンポーネントは Panel を元に作られていますので、 mx:Panel と同じオプションを使用することが出来ます。当然、このタグの内側にmxのコンポーネントタグを記述することも出来ます。
その他
この他、検索中に見つけたページ。http://d.hatena.ne.jp/aqvi/20091101/1257056329
mxml部分をas3で書き出している。中身がどうなっているのかなんとなく理解。

コメントする