list.dataGroup.getElementAt () не возвращает все элементы - PullRequest
0 голосов
/ 27 мая 2011

Я пытаюсь перебрать мой список itemRenderers, чтобы изменить данные определенного элемента. Код работает хорошо, пока индекс for не станет 7 (это максимальное количество видимых элементов в моем списке). Когда индекс равен 7 или более, функция getElementAt () возвращает ноль. В чем может быть проблема?

var itemRenderer:ItemRenderer;
var numItems:int = list.dataGroup.numElements;
trace(numElements) // outputs 14
for(var i:int = 0; i < numItems; i++){
        itemRenderer = list.dataGroup.getElementAt(i) as ItemRenderer;
        if (itemRenderer.data.name == "bar") {
                itemRenderer.data.option = "foo";
                break;
        }
}

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

Если вы хотите изменить данные определенного элемента, почему бы не изменить их на данные, которые вы предоставили dataProvider? Менять его прямо в рендере предмета смешно.

А для справки в будущем причина этого заключается в том, что называется виртуализацией. По сути, создаются не все средства визуализации элементов, а только видимые.

2 голосов
/ 27 мая 2011

Spark List по умолчанию использует виртуальный макет (useVirtualLayout = true). Это позволяет повторно использовать средства визуализации элементов, повысить производительность и уменьшить использование ресурсов. В вашем случае вы можете установить useVirtualLayout=false для вашего списка.

Но вполне возможно, что вы делаете что-то не так, если вам нужно составить список средств визуализации элементов List извне. Попробуйте решить свою проблему другим способом и продолжайте использовать виртуальный макет.

1 голос
/ 21 сентября 2011

Вы также можете использовать RendererExistenceEvent, который запускается при ItemRenderer группы данных, когда он получает данные и обрабатывается. Прослушайте событие rendererAdd в группе данных.

<s:DataGroup id="dataGroupList" dataProvider="{_listData}" 
width="100%" height="100%"
rendererAdd="list_rendererAddHandler(event)"/>

Для получения дополнительной информации ознакомьтесь с справочным документом для RendererExistenceEvent .

Хотя некоторые говорят, что это не лучшая практика для прямого доступа к данным и их изменения в ItemRenderer, могут быть другие случаи использования, когда вам нужно именно это. Например, если вы хотите переключать выбранные или включенные свойства списка на основе какого-либо взаимодействия с пользователем или изменения состояния. Лучшие практики применяются только к простейшим случаям использования, другие случаи требуют, чтобы вы использовали эти события или изменили сам элемент управления.

...