最近、PHPとAS3との連携をさせるようなスクリプトを書いていまして、
その時のデータ連携時にXMLを使おうとしています。
AMFPHPなんかも便利とは思うのですが、なんかインストールが面倒なのと、XMLにしておけば他のアプリケーションとも連携をとりやすそうだ、と考えてXMLにしています。
で、今使っている流れとしては、
1.PHP側でデータを取得し、XMLに整形して出力
2. PHPが吐き出すXMLをswfに読み込んで、DataGridなり、Treeなりに登録
3. swfで、データを読み込み、
はじめはXMLListとして読み込み、
そのXMLListを若干成形したデータをXMLListCollectionに登録
という簡単なものです。
2.の処理ですが、データを同期させるために、XMLListCollectionクラスが大活躍しているのですが、
3のステップで、外部XMLをXMLListとして読み込む際に、
var list:XMLList = new XMLList( e.target.data );
とすればすっぽり使えるのに、
var list:XMLList = e.target.data as XMLList;
と書くとデータがnullになっていました。
同じようにデータを強制変換するときに使えるのか?と思い込んでいたのですが、全然違うみたいですね。
違いを調べないと。。
追記:
本当に恥ずかしいですが、『全く』違うものでした。
as (Adobe Flex 2 リファレンスガイド 『演算子』 as の項参照)———————————————-
使用法
expression as datatype
最初のオペランドで指定された式が、2 番目のオペランドで指定されたデータ型のメンバーであるかどうかを評価します。最初のオペランドがそのデータ型のメンバーである場合、結果は最初のオペランドになります。それ以外の場合、結果の値は null です。
2 番目のオペランドで使用される式は、評価結果がデータ型となる必要があります。
オペランド
expression:* — 指定されたデータ型に対してチェックする値。
datatype:Class — expression オペランドの評価に使用されるデータ型。型指定がないことを表す特殊な * 型は使用できません。
結果
Object — expression が datatype で指定されたデータ型のメンバーである場合、結果は expression になります。それ以外の場合、結果の値は null です。
—————————————————————————–
asは要するに型チェックをして、同じ場合はデータをそのまま利用できて、違う場合はnullを返す、ということですね。
だから、e.target.dataとして取得した型が違うものなので当然nullを返す。
一方、new XMLList()の場合は、new String( int )で変換してくれるように、型変換してくれるので望み通りデータの利用が可能、ということですな。
ああ、恥ずかしい。
2007年9月2日02:17