こんな感じです。XML データを取得しています。解析されるまで待ってから、ライブラリから解析が完了したらイベントをディスパッチする必要があります。
まず、この場合、ライブラリ内のイベントを回避する方法はありますか?
私が見た別の方法は、VO を使用することでした。それで、これは何であり、それを機能させる方法です。
こんな感じです。XML データを取得しています。解析されるまで待ってから、ライブラリから解析が完了したらイベントをディスパッチする必要があります。
まず、この場合、ライブラリ内のイベントを回避する方法はありますか?
私が見た別の方法は、VO を使用することでした。それで、これは何であり、それを機能させる方法です。
AMFPHP を使用できる場合は、強くお勧めします。サーバーとアクションスクリプトの両方で値オブジェクト (VO) を定義できます。これにより、厳密に型指定されたオブジェクトをクライアントとサーバーの間でやり取りできます。解析したり、e4x を使用したり、そのように苦しむ必要はまったくありません。
VO は DTO (Data Transfer Object) とも呼ばれ、そのブースはオブジェクト指向の設計パターンです。
VO を外部オブジェクトと組み合わせて使用すると、あるオブジェクト (ある言語) から同等のオブジェクト (別の言語) にデータを転送できます。
したがって、XML や e4x などを解析する代わりに、ゲートウェイ (つまり、ZendAMF、amfPHP、sabreAMF など) を介して Flex が PHP と直接通信するようになります。
このサイトには、これを行う方法 (RemoteObject のセットアップ) を説明する詳細情報があります。もちろん、George が上で言ったことは良いことです。リモート オブジェクトを実行する予定がある場合は、クラスを登録する必要があります。
http://www.brentknigge.com/?q=node/496
乾杯
flex から XML データとして結果を取得している場合、xml を取得する HTTPService を使用していると思います。そのため、ResultEvent の結果プロパティでデータにアクセスします。
例えば
private function resultHandler(e:ResultEvent):void{}
あなたのデータを取得します:
private function resultHandler(e:ResultEvent):void{
var tempCollection:ArrayCollection = new ArrayCollection();
tempCollection = e.result.someDataObject as ArrayCollection;
}
これは、xml から取得したデータを VO に設定する場所です。
private function resultHandler(e:ResultEvent):void{
var tempCollection:ArrayCollection = new ArrayCollection();
tempCollection = e.result.someDataNode as ArrayCollection;
for each(var item:Object in tempCollection){
var myVO:VO = new Image();
myVO.firstProperty = item.firstProperty;
myVO.secondProperty = item.secondProperty;
myVOCollection.addItem(myVO);
}
}
アイデアは単純です... VO は単なるカスタム オブジェクトです。作成するクラスはオブジェクトを拡張し、外部データ ソース (例: xml result ) からの値を格納する目的があります。動的クラスを使用するよりも高速なカスタム クラスを使用しているため、コードを読み取ったりデバッグしたりするときに非常に役立ちます (データ型のチェックなどを取得できます)。
ストア内の製品、ギャラリー内の写真など、何でもかまいません。
この例では、someDataNode が xml のノードであり、myVOCollection、データの ArrayCollection などであると想定しています。
したがって、この場合のVOは次のようになります。
package{
class VO{
private var _firstProperty:String;
private var _secondProperty:String;
public function VO(firstProp:String=null,secondProp:String=null){
_firstProperty = firstProp;
_secondProperty = secondProperty;
}
public function get firstProperty():String{
return _firstProperty;
}
public function set firstProperty(value:String):void{
_firstProperty = value;
}
public function get secondProperty():String{
return _secondProperty;
}
public function set secondProperty(value:String):void{
_secondProperty = value;
}
}
}
Model クラスはおそらくデータの読み込みと解析を管理し、それが完了するとイベントを送出して、要求されたデータが利用可能であることをアプリケーションに知らせます。
できるだけ短い言葉で言えば、flex の valueobject は、データの項目を表す actionscipt クラスになります。1 つを使用するということは、(外部ソースから入ってくる) 汎用オブジェクトをそのアクション スクリプト表現にマッピングすることを意味します。
派手なものはありません。
それが役に立てば幸い。