8月 26

使っている割に、よく忘れてるのでメモ

dataProvider.removeItemAt(selectedIndex);

8月 06

TextAreaに値を入れて最下段に自動的にスクロールさせて表示するには

Actionscript:
  1. textArea.verticalScrollPosition = textArea.maxVerticalScrollPosition;

とすればいいのですが、textプロパティへの追加とこのスクロール処理をイベントの中で行うとmaxVerticalScrollPositionに正しい値が入っておらず、思ったような結果が得られない場合がある。

その場合は下記のように記述することで回避できる。

Actionscript:
  1. //何かのイベントハンドラ内
  2. {
  3.     textArea.text += "abcdefg";
  4.     callLater(setScroll);
  5. }
  6.  
  7. private function setScroll():void
  8. {
  9.     textArea.verticalScrollPosition = textArea.maxVerticalScrollPosition;
  10. }

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が入っていないことが多いからすぐに忘れる・・・