在一臺PC上,我有一個datagrid,dataprovider是一個由從MySQL DB檢索的記錄集合填充的數組集合。在另一臺PC上,另一個組件檢索相同的記錄集合並更新它們。即使如此,PC中的數據網格反映了PC 2中的變化,這很好,因爲它會將變化推向所有受影響的在線控件。但是,我想檢測arraycollection更改以執行其他一些操作,但未檢測到此類CollectionEvent.COLLECTION_CHANGE。你能幫忙嗎?以下是代碼:Flex檢測CollectionEvent更改
我正在使用lcds和數據管理服務已處理數據同步。這就是爲什麼具有數據網格數據提供程序acLeave的第一臺PC自動更改的原因。不知何故,這是因爲知道有一個客戶端(電腦一)在線,然後它推動到它的變化。我的問題是,數據網格數據發生了變化,我想檢測到發生了數據更改,以便我可以進行其他更新。通常,爲了檢測datagrid的變化,我可以使用datagrid datachange或簡單地將數據提供者添加到collectionEvent.COLLECTION_CHANGE的數據提供者中,但在這種情況下,即使我可以看到ac acLeave已更改,事件也不會觸發。請幫忙!
嗨,我再次感謝您的建議。我已經將setter添加到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 !");
}
兩個單獨的PC可以反映同一個「數據soruce」中的變化的唯一方法是通過服務器;最有可能啓用某種類型的推送功能。更改一臺PC上的項目不會激發另一臺PC上的COLLECTION_CHANGE事件。 – JeffryHouser 2012-08-13 13:53:28
我同意w/Flextras:遠程集合(在另一臺PC上)如何更新?您可能會聽到該事件,當更新發生時,會生成一個全新的ArrayCollection並將其發送到第二臺PC(或由其檢索),而不是正在更改的原始集合。如果發生類似情況,原始集合將不會生成更改事件。 – 2012-08-13 15:07:27