2012-08-13 84 views
1

在一臺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 !"); 
} 
+0

兩個單獨的PC可以反映同一個「數據soruce」中的變化的唯一方法是通過服務器;最有可能啓用某種類型的推送功能。更改一臺PC上的項目不會激發另一臺PC上的COLLECTION_CHANGE事件。 – JeffryHouser 2012-08-13 13:53:28

+0

我同意w/Flextras:遠程集合(在另一臺PC上)如何更新?您可能會聽到該事件,當更新發生時,會生成一個全新的ArrayCollection並將其發送到第二臺PC(或由其檢索),而不是正在更改的原始集合。如果發生類似情況,原始集合將不會生成更改事件。 – 2012-08-13 15:07:27

回答

0

如果您收藏的更改處理不點火,我猜是這樣發生的事情:

  • PC1增加了收集變化監聽
  • PC2改變了收集
  • LCDS向pc1發送一個全新的ArrayCollection對象(不僅僅是更改的元素)使用

原來ArrayCollection你正在收聽收藏變化不一定變得更改,它正在取代取代。所以沒有收集改變事件ocurrs。

如果您爲此ArrayCollection(在您的示例中爲acLeave)添加了一個setter方法,那麼您將知道這是否會發生。從技術上講,您應該同時使用集合更改事件和此setter,以便能夠檢測到數組可能發生更改時的所有情況。