aqubi+shin1

Recent site activity

Adobe Air‎ > ‎

超初心者の為の子ネタ


trace()は使わない方が良い

変数などをデバッグしたい時にtrace("aaa")なんかをつい使ってしまいがちですが、これは使わないのが賢明らしい。
通常の実行時では出力されないが、実行されるので少なからずパフォーマンスにも影響でる。
ブラウザ拡張機能を使うと、traceの内容とかも見えちゃう。
というのが理由(らしい)です。

じゃー何を使うか?ですが、
に書かれているように、リスク軽減の何かの手段を打つか、素直にmx.controls.Alert.show()を使ってダイアログを表示する。
って所でしょうか。

ダイアログが出るのはちょっとウザイ。。ですけども、後で削除するのが必要なら、ダイアログの方が無難でしょぅ。
ということで、ASを書くときには、import mx.controls.Alert; を忘れずにっ♪

MXMLのコンストラクタ

MXMLのコンストラクタは作れません!

initialize、creationCompleteのイベントで処理を書きましょう。

MXMLのコンポーネントを操作したいのであれば、creationCompleteの方がいいらしいです。


データバインディング

変数と、コンポーネント表示とをデータバインディングするには、

 [Bindable]private var hoge :String;

と、変数にBindableの指定をし、

<mx:TextInput text="{hoge}" />

とする。


これで変数の値が変わったら自動的にコンポーネントの表示の値も変わる。

逆にコンポーネントの入力値が変わったら変数の値にも自動的に反映させたい場合には、

<mx:Binding>タグやmx.binding.utils.BindingUtilsを使って指定が必要。


setter, getterで使用する場合には


private var _id:Number;


[Bindable]
public function set id(id:Number):void { _id = id; }
public function get id():Number { return _id; }

と記述できます。

ここで、getterだけ...read onlyだけの場合には

[Bindable ("readonly")]

逆にsetterだけ...wite onlyだけの場合には、

[Bindable ("writelonly")]

と記述することができます。


Bindableの属性にはもう一つ、typeというのが指定できます。

これは、どの型であつかうか?というものです。


[Bindable(type="DataProvider")]

var x: Object;

上記の場合は、実際の型はObjectですがBind時の型ではDataProviderとして扱うことになります。


定数の書き方

static const って書けばいいみたい。

public static const TEISU:String = "ABC";

Arrayの使い方

Arrayのクラスには色んなオブジェクトが渡せます。
var myArray:Array = new Array();
ArrayはTopレベルのクラスなので、import文は特になくてOK。

追加は
var myObject:MyObject;
myArray.push(myObject);
削除は
myArray.remove(myObject);
でできます。
ループしたい時には、for eachを使えます。
for each(var obj:MyObject in myArray) {
}
配列の中身がStringの場合は for (var obj:String in myArray)でいけるけど、
独自オブジェクトの場合は for each...inを使わないといけないっぽぃ

クリアのメソッドは見当たらなくて。。(Javaだったらclear()みたいなメソッド)
とりあえず myArray = [] でしてます。
もっといい方法があるんかもしれないけど。

2008/08/12 追記
mx.collections.ArrayCollectionというクラスを使うと便利っぽい。
クリアもremoveAllあるし、filter機能も使えるので、DataGridの表示用Arrayは特にこっちがいいっぽい。

ダイアログの表示

ダイアログの表示には、mx.controls.Alert を使用します。
よく使うのは、Alert.show("メッセージ");という形。
でもこのAlertには色んなオプションがつけれて、YES,NOダイアログとかも表示できます。

public static show(
 text:String,
 title:String = null,
 flags:uint = mx.controls.Alert.OK,
 parent:Sprite = null,
 clickListener:Function = null,
iconClass:Class = null,
 defaultButton:uint = mx.controls.Alert.OK) : Alert

第一引数以外は省略可能になっている感じです。

YES/NOダイアログの使用例は以下。
Alert.show("このTaskEntryを削除しますか?", "確認", Alert.YES|Alert.NO, window,
    function (event:CloseEvent):void {
        if (event.detail == Alert.YES) {
            //YES押されたときの処理
        }
    }
);


Javaでいう、JOptionPaneみたいな感じですが、InputDialogのようなオプションは無いみたいですね。。残念。

mx:WindowedApplication, mx:Windowの参照をを取得

mx:WindowedApplication, mx:Windowの参照を取得する方法。
子コンポーネントから、Windowの参照を取得する場合は、UIComponentparentDocumentのプロパティで取れるようです。
UIComponentはいろんなGUIコントロールの継承元ですので、TextInputやItemRendererなどで使うことができます。

現在ActiveになっているWindowの参照を取得するには、(無理矢理なので一番いい方法かは分からないんですけども....)
import mx.managers.SystemManager;
....
SystemManager(NativeApplication.nativeApplication.activeWindow.stage.getChildAt(0)).application
で取得することはできました。

Flexのソースコードの場所

オープンソースなので、コードが見る事ができます。
mx関連のソースコードの場所は以下。
http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/framework/src/mx/

Airアプリケーションのバージョンを取得する

    var appDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor;
    var ns:Namespace = appDescriptor.namespace();
    var appVersion:String = appDescriptor.ns::version;