Я реализую пользовательский компонент Flex, который обеспечивает прокручиваемую точку обзора в (возможно, очень большой) сетке данных. Я использую шаблон ItemRenderer, так что у меня есть только UIComponents для элементов, видимых на экране в данный момент времени. Другими словами, что-то похожее на стандартный элемент управления DataGrid.
Одно требование, которое у меня есть, - это динамическое изменение размеров ячеек сетки в соответствии с предоставленными данными, чтобы ширина столбцов и высота строк были известны заранее. (Ширина столбца и высота строки не могут колебаться, поскольку пользователь прокручивает и появляются новые ячейки.)
Это требование подразумевает фазу «предварительного измерения» всей сетки, которая должна выполняться при изменении компонента dataSource или itemRenderer компонента. Я хотел бы использовать стандартные операции измерения компонентов Flex для выполнения этой фазы предварительного измерения.
Моя текущая стратегия для этого этапа предварительной оценки заключается в следующем:
- Получить экземпляр itemRenderer
- Инициализация itemRenderer
- Для каждой ячейки в источнике данных:
- Установить объект данных dataRenderer на данные этой ячейки
- 'commitProperties ()' для компонента
- 'measure ()' компонент
- Обновлять ширину столбца / высоту строки в соответствии с результатами измерений
Я бы предпочел не присоединять itemRenderer к списку отображения приложения, но это означает, что он не будет инициализирован платформой. Кроме того, мне нужно, чтобы фазы инициализации рендерера и commitProperties / измерения происходили синхронно. Я боюсь, какую часть инфраструктуры управления жизненным циклом компонентов Flex мне придется реплицировать для достижения этой цели.
Поэтому я призываю более опытных, чем я, слова мудрости:
- Есть мысли о целесообразности этой стратегии?
- Любые предложения о том, как я мог бы элегантно использовать каркас для выполнения этого измерения для меня?
- Есть ли лучшие стратегии для определения размера ячейки?