AIR,Flexの雑多なメモ
かなり古くなってる情報も
Adobe AIRメモ
PhoneGap | Developer Portal
Flash Builder 4とプラグインで爆速コーディングをしよう! | ClockMaker Blog
Flash Builder 4 Index « 夢茶爺&苦茶爺のPC奮戦備忘録
Adobe ActionScript® 3(AS3 )API リファレンス
HTML 開発者用 Adobe® AIR® API リファレンスガイド
FlexはFlashの一部
RIA開発に特化したコンポーネントを備えたフレームワーク
生成されるのはSWF
デメリット
配布サイズが大きくなる。そのため初回起動時に時間がかかる。
Flexのコンパイル
mxmlファイル→ActionScriptファイル→SWFファイル
AIR
META-INFもあるので、warとかearみたいなもの
jarで展開可能
airパッケージはswfに配備情報を付加しただけのファイル
.airはjarで展開できる。 - ねこら対策研究要塞日誌@はてな
ActionScript3.0
JavaScriptの標準規格であるECMAScriptのECMA-262 4th草案に準拠したもの
乱暴にいうと、JavaScriptにクラス定義やパッケージ、型宣言を追加したもの。
JavaScript+Javaというイメージ。
as演算子、is演算子
http://d.hatena.ne.jp/ActionScript/20090427/as3_as_operator
MXMLから生成されるActionScriptを確認する方法
プロジェクトのプロパティで、Flexコンパイラーに引数を追加する
-keepを追加
bin-debugフォルダにgeneratedというフォルダができて中に生成されたASが保存されている。
Flex Formatterを入れてコーディング規約を揃える
mxml
名前のとおりxmlに準拠したもの。
テキスト系のコントロールで改行文字など、特殊文字を扱いたい場合はCDATAセクションを使うと良い
<s:text><![CDATA[ 本日は <晴天> なり]] > </s:text>
豊富なコンポーネントで.netのようなポトリペタンが可能。
画面上に見える部品であるビジュアルコンポーネントと
非ビジュアルコンポーネントがある。
非ビジュアルコンポーネントはプログラマ的には結構抵抗あるかも。
asに書いた方が精神衛生上いいかも。
ネームスペース
s: や fx: など。タグ名の重複を避けるために導入されているもの。
s: や fx: といった接頭辞は、一意なURIと結びつけられている。
自分でコンポーネントを自作したら、それをネームスペースに使うことも可能。
mxmlでのプログラムについて
html上でのjavascriptのように、プログラム文を
具体的に明示する
HTML/JavaScriptでは問題ないケース
<body> <script type="text/javascript"> var a = 30; alert(a); </script> </body>
MXMLではエラーとなるケース
<fx:Script> <![CDATA[ var a:int = 30; //宣言は問題ない Alert.show(a); //プログラムの文はエラー import mx.controls.Alert; //これも問題ない protected function helloButton_clickHandler(event:MouseEvent):void { //これも問題ない Alert.show("こんにちは"); } ]] > </fx:Script>
MXMLはActionsScriptのクラスに変換される為、このような事がおこる。
上記の例でいえばvar a:int=30;は、そのmxmlクラスのメンバー変数となる。
Alert.show(a);は、クラス定義の中に直接書かれているのと同じ状態。
functionはインスタンスメソッドとなる。
つまり
ロジックの分離について
ビュー(mxml),ロジック,モデルという感じにしたい。
- scriptタグに普通に記述、またはscriptファイルを外出しする
- MVCフレームワークを使用
- IMXMLObjectを継承する
- ロジックでビューを継承する
scriptタグに記述するのは前述の理由等により避けたい。
他、イベントハンドラをインラインに書いた場合は、イベントをremoveEventListenerを使用して廃棄することが出来ない点も気をつける。
フレームワークは学習コストが発生するのと、そのフレームワークに依存してしまうため却下。
IMXMLObjectを継承する
http://level0.kayac.com/2010/08/flexmvc.php
共通の処理という事を考えて、これをさらに汎用的に。
IMXMLObjectをextendしたクラスを生成して、ヘルパーの親クラスとする。
ヘルパーではそのクラスを継承して各mxmlと対応させる。
モデルは適宜用意する
IMXMLObjectとは非ビジュアルコンポーネントが実装する最も基本的なインターフェイス
ベースヘルパー IMXMLObjectクラスを継承
各ヘルパー ベースヘルパーを継承
viewは各mxml.
モデルを適宜用意。
ロジックでビューを継承
ロジックをmxmlのサブクラスにする。お手軽かつ簡単。
ただし、共通処理ではちょっと困る。
起動時最適化
http://level0.kayac.com/2010/04/flex_3.php
その1のcreationPolicyのqueuedはFlex4.1ではなくなった模様。
creationPolicy noneで、明示的な指示があるまで待機。
初期ロード時に最小限に保つ。
dataprovider自作
flex:DataGrid sqlを使ってdataProviderを自作する ( Part 3 :IListの実装)
AIR2.0時のメモ
- Safari 4.0.3のwebkit相当
- ファンクションキーや右クリックもOKに。
- AIRのみでサーバー作成可能。
- TSL/SSLソケット通信
- ネイティブプロセス呼び出し
- exeインストーラー作成可能。
- 他のアプリをインストーラに同梱可能
Adobe AIR 2.0 Betaサンプルアプリケーション
http://www.adobe.com/jp/joc/air2/samples/
AIR SQLite
AIRでSQLiteの気をつけるとところ知ってるとお得なこと - PHP,MySQL,Flex,JSな日々+イラストとか
AIRでのローカルDBのベストプラクティス(訳) - satoko's blog - s21g
Date 親和型の列には、日付と時刻の値が格納されます。Date 列は値として ActionScript または JavaScript の Date イン スタンスを受け入れるように設計されており、Date 列に String 値を格納しようとすると、ランタイムでユリウス日付に変 換されます。変換に失敗するとエラーが発生します。コードで Number、int、または uint の値を格納しようとした場合、 日付の検証は行われず、有効なユリウス日付値と見なされます。SELECT ステートメントを使用して Date 値を取得すると 自動的に Date インスタンスに変換されます。Date 値は REAL 記憶クラスを使用してユリウス日付値として格納されるので、ソート操作や比較操作も期待どおりに動作します。
richeditabletextで動的にイベントを作成してtextFlowをセットする
http://stackoverflow.com/questions/4371740/flexhow-to-catch-a-href-event
http://flexdevtips.blogspot.com/2010/10/displaying-html-text-in-labels.html
autocomplete
スキン当てられる
http://flashcommander.org/blog/flex-4-autocomplete
flex3,4も動くが3ベース
http://hillelcoren.com/flex-autocomplete/
スクロール
listのスクロールでボトムに到達したら新しいアイテムを追加する
http://stackoverflow.com/questions/3876132/flex-spark-list-scroll-to-bottom-when-new-data-is-added
Adobe Community: Flex Spark List scroll to bottom when new data is added
flex4 spark のlistでindexを利用してスクロールする
http://blog.flexexamples.com/2010/05/12/scrolling-to-a-specific-index-in-a-spark-list-control-in-flex-4/
Detecting when the vertical scroll bar is scrolled on a Spark List control in Flex 4 | Flex Examples
CTOA日記:Flex スクロールが最後まで到達したかを確認 - livedoor Blog(ブログ)
ビューポートの理解
http://www.adobe.com/jp/devnet/flex/articles/flex4_viewport_scrolling.html
スクローラー
http://www.godagoda.net/blog/2010/09/flex4scroller.html
データリストをばらしてスキンをあてる。
http://help.adobe.com/ja_JP/AS3LCR/Flex_4.0/spark/components/VScrollBar.html?allClasses=1#includeExamplesSummary
マウスの動きに追従するスクロール
http://studynet.blog54.fc2.com/blog-entry-95.html
childのlistで縦スクロールしているときに親の横スクロールが反応して勝手に動いてしまう
解決策
親でwheelイベントを殺す。
親も子もviewportを使用している場合に起こる。
マウスホイールイベントに親が反応してしまっていたため。
HorizontalLayoutのListをHScrollBarのviewportに指定すると簡単に再現する。
HorizontalのList上で上下に動かすと左右にスクロールする。
スムースImage(アンチエイリアスを有効に)
http://studynet.blog54.fc2.com/blog-entry-68.html
http://cookbooks.adobe.com/post_Smooth_Image_with_Preloader__Drop_Shadow__Smart_Re-7606.html
動的画像キャッシュ
Flexで動的画像キャッシュができる | ClockMaker Blog
Caching images loaded from a spark item renderer | Flexponential
imageクラスを拡張したサブクラスを作ってキャッシュ
http://thanksmister.com/?p=336
ButtonBarにアイコンうめこみ
http://cookbooks.adobe.com/post_Tutorials_for_skinning_Spark_ButtonBar_component_w-16722.html
http://blog.flexexamples.com/2009/07/28/displaying-icons-in-a-spark-buttonbar-control-in-flex-4/
itemrenderer
spark itemrenderer&skinをプログラマブルに処理する
http://stackoverflow.com/questions/4347930/how-do-you-combine-renderers-in-flex
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt2.html
表示したいレコードが1,000個あるとします。この場合、リストコントロールが1,000個のitemRendererを作成するかというと、そうではありません。リストに表示される行が10行だけだとすれば、作成されるitemRendererの数は12程度
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt3.html
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt4.html
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt5.html
UIComponentのフォーカスを外す
this.stage.focus = null;
airアプリケーションサンドボックス環境化でのjs制限
Applicationsandboxではdocument.write(writeln)は使えない。
createElementしてのdom追加は出来る。
バグ
PopUpManager.removePopUpを使った時に
buttonのvisibleがあると起こることがあるバグ
http://forums.adobe.com/message/2741467
titlewindowクローズ処理での
http://forums.adobe.com/message/2708042
カスタムコンポーネント
コンポーネントのカスタマイズ
FlexComponentを作ってみる - 謎言語使いの徒然
spark skin
http://flexwiz.amosl.com/flex/flex4/tip-easy-spark-icon-button/
Flex 4 マスターシリーズ #10 Flex 4 Spark Layouts | デベロッパーセンター
[SkinState("hovered")]
などと追加して、新たなステートを増やすことが可能
[SkinPart(required="false")]
で、ホストコンポーネントとの受け渡しが可能になる。
例えばListのscrollerや、ButtonのupdateLabelなど。
notification
as3nativealertlib - An AIR alert that appears in a native window - Google Project Hosting
フォーエスメッセンジャー
as3notificationlibを使用している
jp/fores/foresmessager/manager/MessengerManager.as
http://www.moongift.jp/2008/03/foresmessenger/
growlのようなnotification
http://aqubiblog.blogspot.com/2010/05/adobeair.html
nativeprocessで叩く
http://www.webkitchen.be/2010/03/15/using-growl-in-air-applications-with-air-2/
Flash Builderのパフォーマンス調整
Xms Xmx MaxPermSize PermSizeを調整。
http://d.hatena.ne.jp/tukaharu/20110322/1300757321