1

flex DataProviderの1つのアイテムのみを更新することは可能ですか?

たとえば、このようなことを達成する

[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

これで試すことができます

vectorcollection の 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 に答える
1

問題が何であるかを完全に理解しているかどうかはわかりませんが、同時に多くの値を挿入するときにコレクションによって 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 に答える