−124
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
/**
* @private
* Causes to re-measure the natural width/height
* if size changes, parent size is invalidated as well.
*/
protected function invalidateSize():void
{
var curWidth:Number = naturalWidth;
var curHeight:Number = naturalHeight;
measure();
if (curWidth != naturalWidth || curHeight != naturalHeight)
{
var parent:DisplayObjectContainer = this.parent;
// Search for an ancestor SpriteVisualElement to inform them that
// they need to re-measure as their size has been invalidated.
while (nestedSpriteVisualElement)
{
if (parent is SpriteVisualElement || parent == null || parent.parent == null)
{
break;
}
else
{
parent = parent.parent;
}
}
if (parent is SpriteVisualElement)
SpriteVisualElement(parent).invalidateSize();
else
invalidateParentSizeAndDisplayList();
}
}
Тут нужно немного объяснить. Дело в том, что это один из очень важных классов в серии компонентов "Спарк". Эта функция, фактически, отвечает за перерисовку компонента. Но вот вместо того, чтобы сделать так, чтобы контейнер сообщал содержанию когда перерисовываться или, по крайней мере сам решал, когда перерисовываться получается наоборот - и, фактически, любое мало мельски значимое изменение в ребенке полезет перерисовывать родителей. Просто уже са саму идею invalidateParentSizeAndDisplayList хочется пальцы в двери...
Запостил:
wvxvw,
25 Марта 2012
...
parent = parent.parent;
Красотень какая.
А может родитель не хочет знать / на него это никак не повлияет - почему ребенок прининает решения за родителя что делать родителю? Это классический случай за который как раз и нужно пальцы в двери.
> Если кто-то (не важно родитель или кто-то другой) заинтересован в том, чтобы знать об этом - событие
Event.REMOVED :)