apache-flex 如何从Flex Spark List的DataProvider对象中获取其ItemRenderer?

rqcrx0a6  于 2022-11-01  发布在  Apache
关注(0)|答案(4)|浏览(153)

在Flex中,我可以创建一个ItemRenderer来表示Lists DataProvider中的每个项目,但是如何通过DataProviders对象访问ItemRenderer的示例呢?

piwo6bdm

piwo6bdm1#

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;
}
wribegjk

wribegjk2#

通过使用此方法,您无法获得可视区域之外的渲染器,并且还会出现许多其他问题。

oknwwptz

oknwwptz3#

如果需要更改项呈示器的行为方式,请更改导致该行为的数据。

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;

这是一个简单的例子,我把项目标记为可删除,渲染器也随之改变,因为数据已经改变了。对于较大的数据集,我知道这可能有点慢,但它给了你你想要的控制。
如果需要更改一个渲染器,只需修改dataProvider或dataGroup中相应对象上的数据。

var item:Object = this.getItemAt(index);
e5nqia27

e5nqia274#

我知道这是一个老线索,但也许它会帮助一些人:

var item:ItemRenderer = list.dataGroup.getElementAt(0) as ItemRenderer;

这将给予你一个ItemRenderer,如果你有一个自定义的IR,那么就使用那个类和转换以及你的设置。

相关问题