Показать список архитектуры в Flex - PullRequest
1 голос
/ 07 марта 2012

Меня спросили об архитектуре списка отображения во Flex на собеседовании.Позже я искал об этом, но бесполезно.Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Список отображения похож на дерево. Представьте объект «Сцена» как основу дерева. Думайте о мувиклипах и спрайтах, которые добавляются на сцену как ветви и листья, растущие на дереве. Список отображения также служит ядром для системы событий в AVM2. Объекты, которые прикреплены к списку отображения (то есть они сами или их родитель, родительский родитель и т. Д. В конечном итоге подключаются к рабочей области), могут «пузырить» события через список отображения.

Как бы то ни было, это мой короткий маленький способ объяснить это, но вы можете получить гораздо более подробную информацию по этим ссылкам:

http://www.adobe.com/devnet/flash/quickstart/display_list_programming_as3.html

http://tv.adobe.com/watch/colin-moocks-lost-actionscript-weekend/the-display-list/

1 голос
/ 07 марта 2012

кажется, что вопрос должен звучать так: когда вы пишете <s:Application> (или любой другой SkinnableContainer / UIComponent) в вашем коде mxml - какова структурарезультирующий список отображения?

, поэтому вы должны сделать что-то вроде:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="onAppComplete();">

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[

        import flash.display.DisplayObject;
        import flash.display.DisplayObjectContainer;
        import mx.controls.Alert;
        import mx.core.UIComponent;
        import spark.components.SkinnableContainer;
        private function onAppComplete(e:* = null):void {
            trace(parseList(stage));
            //Alert.show(parseList(stage));
        }

        private function parseList(uic:DisplayObjectContainer, prefix:String = '>'):String{
            prefix = prefix || '>';
            var retStr:String = '';
            for (var i:int = 0; i < uic.numChildren; i++ ) {
                retStr += prefix + uic.getChildAt(i).name + '\n';
                if (uic.getChildAt(i) is DisplayObjectContainer) {
                    retStr += parseList(uic.getChildAt(i) as DisplayObjectContainer, prefix + '>');
                }
            }
            return retStr; 
        }

        ]]>
    </fx:Script>
    <s:SkinnableContainer>
        <s:Panel>
            <mx:UIComponent>

            </mx:UIComponent>
        </s:Panel>
    </s:SkinnableContainer>
</s:Application>

(или, может быть, более сложный) и изучить выводкод выше выводит

>root1
>>NewFile1
>>>ApplicationSkin3
>>>>Group4
>>>>>Group5
>>>>>>SkinnableContainer6
>>>>>>>SkinnableContainerSkin7
>>>>>>>>Group8
>>>>>>>>>Panel9
>>>>>>>>>>PanelSkin10
>>>>>>>>>>>RectangularDropShadow11
>>>>>>>>>>>Group12
>>>>>>>>>>>>Group13
>>>>>>>>>>>>instance36
>>>>>>>>>>>>Group14
>>>>>>>>>>>>>Group15
>>>>>>>>>>>>>>Label16
>>>>>>>>>>>>>>>instance33
>>>>>>>>>>>>>>>instance37
>>>>>>>>>>>>>Group17
>>>>>>>>>>>>>>UIComponent18
...