Я столкнулся с аналогичными проблемами с DataGrid и несколькими рендерингами элементов и повторным использованием рендеринга элементов при прокрутке. Чтобы получить доступ к средствам представления элементов DataGrid, я расширил DataGrid. Моя первая мысль заключалась в том, чтобы использовать индексыToIndex(), за которыми следует indexToItemRenderer(). К сожалению, эти методы не делать то, что я ожидал, так что я добавил метод indicesToItemRenderer():
пакет com.whatever.controls {
import mx.controls.DataGrid;
import mx.controls.listClasses.IListItemRenderer;
public class CustomDataGrid extends DataGrid
{
public function CustomDataGrid()
{
super();
}
public function indicesToItemRenderer(rowIndex:int, colIndex:int):IListItemRenderer
{
var firstItemIndex:int = verticalScrollPosition - offscreenExtraRowsTop;
if (rowIndex < firstItemIndex ||
rowIndex >= firstItemIndex + listItems.length
)
{
return null;
}
return listItems[rowIndex - firstItemIndex][colIndex];
}
}
Чтобы разрешить повторно использовать средства визуализации элементов при прокрутке вопроса см эта статья:
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html
Она сводится к тому, перекрывая сеттер данных и сохранение свойств в данных. Например, у меня был один столбец с помощью элемента CheckBox itemRenderer и другого столбца с помощью ComboBox. Для обоих я слушаю в случае изменения и сохранения выбранных, SelectedIndex и т.д. в данных случаях, когда свойства изменения и переопределения сеттер данных, чтобы установить эти свойства:
override public function set data(value:Object):void
{
if (value != null)
{
super.data = value;
if (data.hasOwnProperty('selected') && data.selected)
{
selected = data.selected;
}
else
{
selected = false;
}
}
}
Это создает отличную точку. В моем рвении, похоже, я пропустил то, что действительно спрашивал плакат; на самом деле это кажется правильным способом, потому что вы правы, визуализаторы повторно используются, и повторное использование может иметь непреднамеренные и непреднамеренные последствия. +1 –
Мы также использовали этот подход, и я согласен, что это, наверное, самый простой. –
Это, наверное, самое простое и изящное решение (поскольку оно полностью соответствует правилам инкапсуляции ООП), которые мы придумали. – Chepech