2012-08-13 44 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,以便能够检测到数组可能发生更改时的所有情况。