7月 17

なるべく使わないように考えていても、使う時が来てしまう。

定義は Applicationがあるソース内のScriptでpublicの変数を定義するだけ。

Actionscript:
  1. <mx :Script>
  2.     <![CDATA[
  3.        
  4.         public var userName:String = "Levin";
  5.     ]]>
  6. </mx>

あくまで MXML形式という人(私など)は

Actionscript:
  1. <mx :String id="userName">Levin</mx>

とかでも同じです。

アクセスするのは Application.applicationの後ろに定義している変数名にすればOK。

Actionscript:
  1. <mx :Script>
  2.     <![CDATA[
  3.        
  4.         var nm:String = Application.application.userName;
  5.     ]]>
  6. </mx>

7月 16

Flex User Groupでもトピックスがあがっていますが、日本語版のAS3 リファレンスから mx ライブラリ関係のドキュメントがごっそり表示されなくなっています。

ここ最近PHPばっかりの仕事だったのでFlexを見てなくて、いざ作業に入ろうかと思えば、これですか・・・

今回の作業は Flex2側のドキュメントさえあればなんとかなるし、あとは貧弱な記憶力でどうにか思い出せるか。

復旧したらローカルに全部取り込むか。

--追加--
どうやら左上のインデックスが死んでいるだけのようですね。
http://livedocs.adobe.com/flex/3_jp/langref/mx/controls/package-detail.html
のようにパッケージの一覧以下の情報は存在しているようです。
http://livedocs.adobe.com/flex/3_jp/ 以下のURLを
mx/[パッケージ名]/[コントロール名].html にすれば閲覧可能。
パッケージ内一覧は
mx/[パッケージ名]/package-detail.html

必要な部分だけ、簡易リンクを作って乗り切るか。

6月 28

こんな感じでまとまっているページを探していたのだよ。

http://www.loscavio.com/downloads/blog/flex3_css_list/flex3_css_list.htm

GUI式ならこちら
Flex Style Explorer

6月 21

いろいろ検索してたら見つけた。
http://d.hatena.ne.jp/kkanda/20080511

やはり . を使ったメンバアクセスが一番早いのね。次が配列。
で遅いのは連想配列。(まぁあたりまえ)

気になったのはObjectとXMLとの速度がどれぐらい違うのかなと。

調べたら・・・
データセットで5倍、呼び出しで10倍ぐらいXMLが遅いです。
10万回ループ
Array:set 17ms get 14ms
XML:set 178ms get 500ms
Object:set 37ms get 30ms

ループ処理なんかで1秒以下の世界での処理時間を気にする場合は

Array(添え字) < Array(連想配列) = Object <<<<<< XML

ってことですね。

でも業務アプリとかメンテナンスを考えるとXMLのほうが扱いやすいし、そこまでスピード要求するものも多くはないので、気にしすぎてコードが意味不明になっては意味がない。

処理スピードに不満が出た時などの参考までに。

6月 21

動的にいろいろするプログラムをやってると、プロパティやら型のチェックが増えてくる。
だから次のような命令が必要になるんだが、ActionScript3から実装なんですね。
案外、忘れる時があるからメモメモ。

■プロパティの存在を確認 (in)
プロパティ名 in オブジェクト
で存在すればtrue、なければfalseが返ってきます。
Object配列とかで使うのが一般的かと考えていたけど、良く考えればプロパティ存在チェックが一番よく使うと気づいた。

Actionscript:
  1. var obj:TextInput = new TextInput();
  2. trace("text" in obj);
  3. //true
  4. trace("title" in obj);
  5. //false

■型(Class)の存在を確認(is , instanceof)
オブジェクト is Class名
で存在すればtrue、なければfalseが返ってきます。
継承されているものも判別可。
継承を含まない場合は
オブジェクト instanceof Class名
と記述。

Actionscript:
  1. var obj:Sprite = new Sprite();
  2. trace(obj is Sprite);             
  3. //true
  4. trace(obj is DisplayObject);
  5. //true
  6. trace(obj instanceof DisplayObject);
  7. //false

■キャスト(as)
String( a ) と a as Stringの違い・・・知らんかった。
as だとキャスト時に型が一致せず変換できない場合等に、例外を発生させずデフォルト値が設定されます。

確かにこれなら try ... catchしなくてもいい場面があるか。

案外、基礎はおいてけぼりのところがたまにあるな・・・

6月 19

それは私。

Flex3 SDK3.0.2になっても相変わらず、localの設定の中にjp_JPがない。
しかたがないので、Builderから取ってきます。

Flex3 Builder3をインストールしたフォルダ(ここではデフォルト)にあるので取ってきましょう。
C:\Program Files\Adobe\Flex Builder 3\sdks\3.0.0\frameworks\locale\
にja_JPが存在しているので、それをSDKのlocalにコピーしましょう。

日本語版しか使わないなら、flex-config.xmlのlocal-elementをja_Jpへ変更すればOK。

6月 17

ってことで日本語も正式対応。
なので、開発環境をアップデートしておきましょう。
6/17時点ではFlex3 SDKはBuild 3.0.2.2095です。

3.0.2.2113ですね・・・

Flex3 SDK Download

6月 16

よく忘れる名前の部分
xml.name() は Object

xml.name().localName
xml.name().uri
の2つからなっている。

Actionscript:
  1. var xml:XML = <item id="a5" />;

上のような場合
if (xml.name() == "item") 成立しない
if (xml.name().localName == "item") こっちが正解

データ処理に時にuriが入っていないことが多いからすぐに忘れる・・・

5月 29

E4Xで操作できるので覚えてしまえば簡単ですね。

元データは下のようなものとして例をあげてます。

Actionscript:
  1. var xml:XML =
  2. <root>
  3.     <title>商品リスト</title>
  4.     <item id="aaa">
  5.         <title>商品名1</title>
  6.         <price>1000</price>
  7.     </item>
  8.     <item id="bbb">
  9.         <title>商品名2</title>
  10.         <price>1500</price>
  11.     </item>
  12.     <item id="ccc">
  13.         <title>商品名3</title>
  14.         <price>2000</price>
  15.     </item>
  16. </root>;

■直接設定
xml.title = "商品リスト(修正)";
xml["title"] = "商品リスト(修正);
//どちらも結果は同じ

xml.title.@date = "2008/05/25";
xml["title"]["@date"] = "2008/05/25";
//どちらも結果は同じ

■条件式

Actionscript:
  1. trace( xml.item.(@id == "aaa").title );     //商品名1
  2.  
  3. trace( xml.item.(title == "商品名2") );
  4. //<item id="bbb">
  5. //    <title>商品名2</title>
  6. //    <price>1500</price>
  7. //</item>
  8.  
  9. trace( xml.item.(priice> 2000) );
  10. //<item id="ccc">
  11. //    <title>商品名3</title>
  12. //    <price>2000</price>
  13. //</item>

※条件式内の変数などはコンパイル時にはチェックされていない。
間違っていた場合、実行時にランタイムエラーを引き起こすので注意。

■変数などを使いたい場合

Actionscript:
  1. var n1:String = "item";
  2. var a1:String = "id";
  3. var n2:String = "title";
  4.  
  5. trace( xml[n1].(attribute(a1) == "bbb")[n2] );
  6. //"商品名2"

※条件式に["@id"]とかは使えないので attribute("id")で行っている

■追加・変更
xml.item.price = 2000;
※この場合はランタイムエラー(設定先が複数あるので)
itemが1つしか存在しない場合は成功

xml.item.(@id == "bbb").price = 2000;
こちらであれば件数に関係なくidが存在していれば設定される

順番が判明している場合
xml.item[1].price = 2000;
で添え字指定も可能

■1件づつ取り出す (..)

Actionscript:
  1. for each (var item:XML in xml..item){
  2.     //処理 ( itemが順番に取得できます )
  3. }

■itemを全部消す (delete)
delete xml.item;

■指定したid(一意)のitemを消す
delete xml.item.(@id == "bbb")[0];

■指定したidのitemの子の要素を消す
delete xml.item.title; //itemの子にあるtitleを全て消す
delete xml.item.(@id == "bbb").*; //全て消す

■for eachなどで取り出した値を消す

Actionscript:
  1. for each (var item:XML in xml..item){
  2.     delete item.(true)[0];
  3. }

5月 26

この前、サーバが落ちた時にMysqlだけ自動起動リストに入ってなかった・・・

最近はFlexをいじってなくってネタがないから更新してなかったからなぁ。