Flex では、Lists DataProvider の各項目を表す ItemRenderer を作成できますが、DataProviders オブジェクトを介して ItemRenderer のインスタンスにアクセスするにはどうすればよいですか? 何かのようなものmyList.getItemRenderer(dp.getItemAt(10));
11216 次
4 に答える
15
public function getItemRenderer(list:List, item:Object):ItemRenderer
{
var dataGroup:DataGroup = list.dataGroup;
var n:int = dataGroup.numElements;
for (var i:int = 0; i < n; i++)
{
var renderer:ItemRenderer = dataGroup.getElementAt(i) as ItemRenderer;
if (renderer && renderer.data == item)
return renderer;
}
return null;
}
于 2010-10-27T15:59:23.957 に答える
1
アイテムレンダラーの動作を変更する必要がある場合は、動作の原因となっているデータを変更してください。
var items:ArrayCollection = this.dataProvider as ArrayCollection;
var newItems:ArrayCollection = new ArrayCollection();
if (items.length > 0) {
for (var i:int = 0; i < items.length; i++) {
var item:Object = items[i] as Object;
if (!item.editMode) {
item.editMode = true;
} else {
item.editMode = false;
}
newItems.addItem(item);
}
}
this.dataProvider = null;
this.dataProvider = newItems;
これは、アイテムを削除可能としてマークし、データが変更されたためにレンダラーがそれに応じて変化する単純な例です。より大きなデータセットの場合、これは少し遅くなる可能性があることを理解していますが、それはあなたが求めているコントロールを提供します。
1つのレンダラーを変更する必要がある場合は、dataProviderまたはdataGroup内の対応するオブジェクトのデータを変更するだけです。
var item:Object = this.getItemAt(index);
于 2013-02-13T19:09:14.950 に答える
1
この方法を使用すると、表示可能領域外のレンダラーを取得できなくなり、その他の問題も多く発生します。
于 2012-03-16T07:06:59.600 に答える