Flex - Добавление дочерних элементов, объявленных в mxml, в контейнер более низкого уровня - PullRequest
2 голосов
/ 24 февраля 2011

У меня есть пользовательский компонент, расширяющий группу и содержащий дочерний вид.Компонент закодирован в ActionScript.

При создании экземпляра компонента в mxml, например, так:

<components:CustomGroup width="100%" height="100%">
    <mx:HBox backgroundColor="0xDDFF11" width="100%" height="100%" />
    <mx:HBox backgroundColor="0x22DD63" width="100%" height="100%"/>
</components:CustomGroup>

... Я хотел бы переопределить любую функцию, которая добавляет дочерние элементы в родительскую группу ивместо этого добавьте их в дочернюю область просмотра, но я не могу найти, где происходит добавление.Точки останова в addChild и addElement показывают, что они не вызываются во время добавления.

Любые указания будут высоко оценены.Спасибо!

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

Мне удалось сделать это, переопределив функцию mxmlContent(value:Array).Массив - это массив всех дочерних компонентов, объявленных между родительскими тегами.

Меня немного беспокоит то, что при пошаговом просмотре внутри исходных текстов Adobe я, кажется, проходил его несколько раз, ноточка останова получает только одну остановку.

В любом случае, это придется сделать пока, пока я не найду лучшего решения.

0 голосов
/ 03 июня 2012

Огромное спасибо за mxmlContent (значение: массив).Похоже, это работает для меня.Вот так я привожу природу стека представлений в Sparc contaner

public class DocumentViewer extends SkinnableContainer
{

    [SkinPart(required="true")]
    public var viewStack : ViewStack;

    override public function set mxmlContent(value : Array) : void
    {
        for each (var i : IVisualElement in value)
        {
            addElement(i);
        }
    }

    override public function addElement(element : IVisualElement) : IVisualElement
    {
        if ( element is NavigatorContent )
        {
            return viewStack.addElement(element);
        }
        else
        {
            var nc : NavigatorContent = new NavigatorContent();
            nc.addElement(element);
            return viewStack.addElement(nc);
        }
    }
}
0 голосов
/ 24 февраля 2011

Скомпилируйте ваш проект с флагом -keep-generated-actionscript.Теперь вы можете увидеть, как ваш mxml-код преобразуется в ActionScript.После небольшого исследования я обнаружил, что функция propertiesFactory, по-видимому, играет ключевую роль при создании компонентов, но я не могу найти какое-либо назначение реализации, потому что это просто переменная публичной функции.:-/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...