1. ActionScript / Говнокод #9759

    −124

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 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

    Комментарии (8) RSS

    • var parent:DisplayObjectContainer = this.parent;
      ...
      parent = parent.parent;
      Красотень какая.
      Ответить
      • ехал parent через parent
        Ответить
      • Отец=дедушка, как в древнем египте, когда фараоны вырождались.
        Ответить
    • не, ну а чо? скажем, ребёночек подрос, а парент не шевелится жилплощадь расширять - что делать тогда?
      Ответить
      • Если кто-то (не важно родитель или кто-то другой) заинтересован в том, чтобы знать об этом - событие или callback как раз самый подходящий инструметн чтобы сообщить об этом.
        А может родитель не хочет знать / на него это никак не повлияет - почему ребенок прининает решения за родителя что делать родителю? Это классический случай
        parent.removeChild(this);
        за который как раз и нужно пальцы в двери.
        Ответить
        • > parent.removeChild(this);
          > Если кто-то (не важно родитель или кто-то другой) заинтересован в том, чтобы знать об этом - событие
          Event.REMOVED :)
          Ответить
          • Ну да, и вот вы сделали все с точностью до наоборот. Это как в анекдоте про милиционера и вазу для цветов - и вода все время выливается, потому что донышка нет, и цветы не поставить - горлышко закупорено.
            Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий