Обновление Grid Renderers без вызова updateDisplayList
У меня есть средство визуализации элементов для сетки, которая имеет довольно базовую функцию updateDisplayList:
override protected function updateDisplayList( w : Number, h : Number ) : void
{
super.updateDisplayList( w, h );
var labelWidth : Number = Math.min( _labelDisplay.measuredWidth, w );
var labelHeight : Number = Math.min( _labelDisplay.measuredHeight, h );
_labelDisplay.setActualSize( labelWidth, labelHeight );
var labelX : Number = ( w - _labelDisplay.width ) / 2;
var labelY : Number = ( h - _labelDisplay.height ) / 2;
_labelDisplay.move( labelX, labelY );
//this is just for debugging
graphics.clear();
graphics.beginFill( 0xFF0000, 0.5 );
graphics.drawRect( labelX, labelY, labelWidth, labelHeight );
graphics.endFill();
}
где _labelDisplay - это искровой лейбл. Когда я прокручиваю сетку (это сетка cuatom, а не mx:Grid или AndvancedDataGrid), когда в нижней части сетки появляются новые строки, вызывается updateDisplayList и выполняется код для перерисовки фона и перемещения / изменения размера метки.
Проблема в том, что эти чанги не отражаются в представлении. Текст выровнен неправильно, так как метка, которая использовалась для отображения большой строки, теперь отображает короткую строку, поэтому измеренная ширина изменилась.
В следующий раз я прокручиваю обновление рендеров так, чтобы они выглядели так, как должно - но здесь не вызывается updateDisplayList (на рендерах). Все, что происходит, - это то, что рендеры расположены в сетке. И фон, и метка изначально отображаются некорректно, так что это не просто неправильное поведение метки.
Кто-нибудь понял, почему это происходит?
Спасибо
1 ответ
Просто предположение, но имеет ли это какое-то значение?
override protected function updateDisplayList( w : Number, h : Number ) : void
{
var labelWidth : Number = Math.min( _labelDisplay.measuredWidth, w );
var labelHeight : Number = Math.min( _labelDisplay.measuredHeight, h );
_labelDisplay.setActualSize( labelWidth, labelHeight );
var labelX : Number = ( w - _labelDisplay.width ) / 2;
var labelY : Number = ( h - _labelDisplay.height ) / 2;
_labelDisplay.move( labelX, labelY );
super.updateDisplayList( w, h ); // Call updateDisplayList after moving / resizing _labelDisplay
}