在一台 PC 上,我有一个数据网格,其中 dataprovider 是一个 arraycollection,由从 MySQL DB 检索到的记录集合填充。在另一台 PC 上,另一个组件检索相同的记录集合并更新它们。立即,PC 1 中的数据网格反映了 PC 2 中所做的更改,这很好,因为它将更改推送到所有受影响的控件在线。但是,我想检测 arraycollection 更改以执行其他操作,但未检测到 CollectionEvent.COLLECTION_CHANGE。你能帮忙吗?这是代码:
protected function doInit():void
{
acLeave.addEventListener(CollectionEvent.COLLECTION_CHANGE, onAcLeaveChange);
}
protected function onAcLeaveChange(event:CollectionEvent):void
{
do something
}
我正在使用液晶显示器,数据管理服务已经处理了数据同步。这就是为什么第一台带有数据网格数据提供程序 acLeave 的电脑会自动更改。不知何故,这是因为 lcds 知道有一个客户端(pc 之一)在线,然后它将更改推送给它。我的问题是数据网格数据发生了变化,我想检测是否发生了数据变化,以便进行其他更新。通常,要检测数据网格更改,我可以使用 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 !");
}