忘れていることを思い出すついでに、メモでもしておくことにする。 これからだとActionScript3だけど、まぁ実際の仕事ではしばらく古い仕様で作っていくことの方が多いだろうし。 何がやりたかったかそれほど難しい話ではない。xmlに画像のデータを持たせておく。 xmlには、ライブラリとそれに属する画像のデータが2階層の構造を持って入っているだけ。 xmlからデータを読み込み、ライブラリを選択するとそのライブラリに登録された画像のサムネイルを表示する。 サムネイルをクリックすると、画像を表示する。 という、いたってシンプルなものである。 引っかかったのは、2箇所。 原因はひとつ。2階層になっているデータを処理するうまい方法がよくわからなかったのだ。 data.xml データの構造は、単純化しているが下記のようなモノだ。 <?xml version="1.0" encoding="UTF-8"?> 別に、自前で書いても良いのだが、コンポーネントの使い方をおさらいしておきたかったので、コンポーネントを使用する。 正常にデータが読み込まれていることを確認するために、実際に表示に使用するわけではないがDataGridもつなげている。 コンポーネントは、以下の通り。(他にも使うけど、本題から外れるので省略)
![]() 引っかかった箇所 1XMLConnector > DataSet > List までは、それほど問題なくいける。ここから、DataGridへ持って行くのに手間取った。 問題は、まずバインディング。 DataGrid側から見たバインディング ![]() bound to の dataList:selectedItem.img この.imgがキモだったり 「パス表記を使用」をチェックして「img」といれる。xpath式が使えるらしい。 ![]() でも、このままだとこういう表示になってしまう。itemの中身が渡ってないっぽい。 これは、List側のスキーマを指定してやることで解決した。 ![]() 引っかかった箇所 2これで、基本的にデータのバインディングはできたはず。なのだが、xmlを読み込んでもListの表示までは出るが、DataGridは自動的には表示されない。 selectedItemが空なのだから当然といえば当然なのだが、DataGridはそのままでは更新されないのである。 dataList.selectedIndex = 0;とりあえず、selectedIndexに値をいれてやる。しかし、それだけでは解決しない。 なんだったかなぁ、と延々探していてやっとみつけた。 強制的にデータバインディングを実行させるコマンドである。 dataList.refreshDestinations(); 一応サンプルもアップしておく。 DataComponentAS2.zip (Flash8対応) 正直なところ、未だにDataコンポーネントの設定は、よくわからない。 Flexあたりのマニュアルでも読めば、もう少しわかるようになるのだろうか。 |