1台のPCに、MySQLDBから取得したレコードのコレクションによってデータが入力されたarraycollectionであるdataproviderを備えたデータグリッドがあります。別のPCでは、別のコンポーネントが同じレコードのコレクションを取得して更新します。瞬時に、PC1のデータグリッドはPC2で行われた変更を反映しました。これは、影響を受けるすべてのコントロールに変更をオンラインでプッシュするため、便利です。ただし、他のことを行うためにarraycollectionの変更を検出したいのですが、そのようなCollectionEvent.COLLECTION_CHANGEは検出されません。手伝ってもらえますか?コードは次のとおりです。
protected function doInit():void
{
acLeave.addEventListener(CollectionEvent.COLLECTION_CHANGE, onAcLeaveChange);
}
protected function onAcLeaveChange(event:CollectionEvent):void
{
do something
}
私はlcdsを使用しており、データ管理サービスはすでにデータ同期を処理しています。これが、データグリッドデータプロバイダーacLeaveを備えた最初のPCが自動的に変更された理由です。どういうわけか、lcdsはクライアント(pc one)がオンラインにあることを知っているため、変更をプッシュします。私の質問は、データグリッドデータが変更されたことです。他の更新を実行できるように、データ変更が発生したことを検出したいと思います。通常、datagridの変更を検出するには、datagrid datachangeを使用するか、collectionEvent.COLLECTION_CHANGEのデータプロバイダーにリスナーを追加するだけですが、この場合、ac acLeaveが変更されたことがわかりますが、イベントは発生しませんでした。助けてください!
こんにちは、また私とあなたのアドバイスに感謝します。セッターをacLeaveに追加しましたが、collectionEventの変更をリッスンできません。変更されたコードは次のとおりです。
private var _acLeave:ArrayCollection = new ArrayCollection();
[Bindable]
public function get acLeave():ArrayCollection
{
return _acLeave;
}
public function set acLeave(value:ArrayCollection):void
{
_acLeave = value;
}
protected function doInit():void
{
acLeave.addEventListener(CollectionEvent.COLLECTION_CHANGE, onAcChange);
}
protected function dataGrid_creationCompleteHandler(event:FlexEvent):void
{
getAllResult.token = leaverequestService.getAll();
getAllResult.addEventListener(ResultEvent.RESULT, onGotResult);
}
protected function onGotResult(event:ResultEvent):void
{
acLeave = getAllResult.lastResult;
}
protected function onAcChange(event:CollectionEvent):void
{
// this never executed because unable to detect a change on acLeave
Alert.show("acLeave Changed !");
}