Flex 检测集合事件更改



在一台PC上,我有一个数据网格,数据提供者是一个数组集合,由从MySQL DB检索的记录集合填充。在另一台电脑上,另一个组件检索相同的记录集合并更新它们。毫无疑问,PC 1中的数据网格反映了PC二中所做的更改,这很好,因为它将更改推送到所有受影响的控件在线。但是,我想检测数组集合更改以执行其他一些操作,但未检测到此类CollectionEvent.COLLECTION_CHANGE。你能帮忙吗?这是代码:

protected function doInit():void
{
acLeave.addEventListener(CollectionEvent.COLLECTION_CHANGE, onAcLeaveChange);
}
protected function onAcLeaveChange(event:CollectionEvent):void
{
do something
}

我正在使用LCDS,数据管理服务已经处理了数据同步。这就是为什么第一台具有数据网格数据提供程序 acLeave 的电脑会自动更改的原因。不知何故,这是因为 lcds 知道有一个客户端(PC 一个)在线,然后它会将更改推送到它。我的问题是数据网格数据发生了变化,我想检测是否有数据发生更改,以便我可以进行一些其他更新。通常,为了检测数据网格更改,我可以使用数据网格数据交换或简单地将侦听器添加到数据提供程序以进行collectionEvent.COLLECTION_CHANGE但在这种情况下,即使我可以看到 ac acLeave 发生了变化,事件也没有触发。请帮忙!

嗨,我再次感谢您的建议。我已将设置器添加到 acLeave,但仍然无法侦听集合事件更改。以下是修改后的代码:

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 !");
}

如果您的集合更改处理程序未触发,我猜正在发生这样的事情:

  • PC1 添加集合更改侦听器
  • PC2 更改集合
  • LCDS 向 pc1 发送一个全新的ArrayCollection对象(不仅仅是更改的元素)以供使用

您正在收听的集合更改的原始ArrayCollection不一定会更改,而是要被替换。所以没有集合更改事件。

如果您为此ArrayCollection添加一个 setter 方法(在您的示例中acLeave),那么您将知道这是否会发生。从技术上讲,您应该同时使用集合更改事件和此资源库,以便能够检测数组可以更改的所有情况。

最新更新