1

是否可以仅刷新 flex DataProvider 中的一项?

例如,实现这样的事情

[Bindable]
private var nodes : VectorCollection = new VectorCollection();

/* thousands of insertions on nodes */

/* Triggered by some event */
public function nodeStatusChanged(nodeId : Number) : void {
      nodes.refresh(nodeId);
}

nodes.refresh()而不是每次nodeStatusChanged(nodeId)通话都做。

4

2 回答 2

1

我不确定我是否完全理解您的问题,但是如果您希望在同时插入大量值时只发送一个事件,那么您应该使用中间向量:

var tempVector:Vector.<Node> = new Vector.<Node>();
// Do whatever you need to perform here;
nodes.vector = tempVector;
nodes.refresh();

将 Node 替换为与向量一起使用的类名。在您的refresh()方法中,您然后调度您的事件:

dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
于 2013-03-16T01:07:21.373 回答
1

你可以试试这个

要更新矢量集合中的一项,您可以itemUpdated()在 ICollectionView 中使用。

如果对象未实现 IEventDispatcher 接口,您还可以使用 itemUpdated() 方法通知对数据提供者对象的更改集合;

[Bindable]
private var nodes:VectorCollection = new VectorCollection();

当您更新节点 VectorCollection 中的字段时,如下所示,控件不会自动更新,因此请使用 itemUpdated()。

nodes.getItemAt(0).field1="someOtherValue";

nodes.itemUpdated(nodes.getItemAt(0));

Instead of nodes.refresh();
于 2013-03-16T06:44:23.570 回答