Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何从Flex Spark列表的DataProvider对象获取ItemRenderer?_Apache Flex_Itemrenderer_Dataprovider_Flex Spark - Fatal编程技术网

Apache flex 如何从Flex Spark列表的DataProvider对象获取ItemRenderer?

Apache flex 如何从Flex Spark列表的DataProvider对象获取ItemRenderer?,apache-flex,itemrenderer,dataprovider,flex-spark,Apache Flex,Itemrenderer,Dataprovider,Flex Spark,在Flex中,我可以创建一个ItemRenderer来表示列表DataProvider中的每个项目,但是如何通过DataProviders对象访问ItemRenderer的实例呢?类似于myList.getItemRenderer(dp.getItemAt(10))公共函数getItemRenderer(列表:列表,项目:对象):ItemRenderer { var dataGroup:dataGroup=list.dataGroup; var n:int=dataGroup.numElemen

在Flex中,我可以创建一个ItemRenderer来表示列表DataProvider中的每个项目,但是如何通过DataProviders对象访问ItemRenderer的实例呢?类似于
myList.getItemRenderer(dp.getItemAt(10))

公共函数getItemRenderer(列表:列表,项目:对象):ItemRenderer
{
var dataGroup:dataGroup=list.dataGroup;
var n:int=dataGroup.numElements;
对于(变量i:int=0;i
使用此方法,无法获取位于可视区域之外的渲染器,并且还会出现许多其他问题。

如果需要更改项目渲染器的行为方式,请更改导致该行为的数据

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;

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

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

这将为您提供ItemRenderer,如果您有自定义IR,则只需使用该类和cast以及您的集合。

由于Flex列表默认情况下会回收其项目渲染器,因此您将无法可靠地访问给定数据对象的项目渲染器。如果数据对象滚动到列表的可视区域之外,甚至可能没有与该数据对象关联的渲染器。你想完成什么?非常感谢,我需要这样的东西。为了让它一直工作,你需要将列表的UseVirtualYout设置为false。这样,即使不可见,也将创建所有ItemRenders。使用useVirtualLayout true,某些ItemRenderer只有在可见时才会创建。您是对的。我没有选择前面的答案,但如果能找到解决方案就太好了。这个问题没有“正确”的答案,因为Flex SDK不支持通过数据直接访问渲染器。
var item:Object = this.getItemAt(index);
var item:ItemRenderer = list.dataGroup.getElementAt(0) as ItemRenderer;