在一台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