Как я могу получить ItemRenderer Flex Spark List из его объекта DataProvider? - PullRequest
4 голосов
/ 26 октября 2010

Во Flex я могу создать ItemRenderer для представления каждого элемента в DataProvider списков, но как мне получить доступ к экземпляру ItemRenderer через объект DataProviders?Что-то вроде myList.getItemRenderer(dp.getItemAt(10));

Ответы [ 4 ]

15 голосов
/ 27 октября 2010
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;
}
1 голос
/ 22 мая 2017

Я знаю, что это старая ветка, но, возможно, она кому-нибудь поможет:

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

Это даст вам ItemRenderer, если у вас есть собственный IR, тогда просто используйте этот класс, приведение и ваш сет.

1 голос
/ 13 февраля 2013

Если вам нужно изменить поведение средства визуализации элементов, измените данные, которые вызывают поведение.

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;

Это простой пример, в котором элементы I помечаются как подлежащие удалению, а средство визуализации изменяется в соответствии с изменением данных. Я понимаю, что для больших наборов данных это может быть немного медленным, но это дает вам контроль, который вы ищете.

Если вам нужно изменить один рендерер, просто измените данные соответствующего объекта в dataProvider или dataGroup.

var item:Object = this.getItemAt(index);
1 голос
/ 16 марта 2012

Используя этот метод, вы не можете получить средство визуализации, которое находится за пределами видимой области, и также будет много других проблем.

...