Вызов метода из компонента mxml, созданного из класса as3? - PullRequest
0 голосов
/ 16 июня 2011

Хорошо, я всегда просто разрабатывал свои проекты в as3 вместо mxml, и я обычно просто настраивал свое приложение для запуска основного файла ActionScript в качестве основного корня документа, что-то вроде того, как вы делаете это во флэш-памяти, но во Flash Builder. Я делаю что-то вроде этого:

<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    .....etcetc
>

    <com:MyAS3DocClass>
    </com>

    <fx:Script>
        <![CDATA[
            public function call_from_outside():void
            {
                //Some code stuff here...
            }
        ]]>
    </fx:Script>

</s:Application>

Теперь скажите, что в MyAS3DocClass есть открытая функция:

public function hitme():void
{
    trace('ouch');
}

У меня вопрос: как я могу вызвать вызов этой функции hitme() внутри функции call_from_outside() между тегами <fx:Script>?

Причина, по которой я это делаю, заключается в том, что у меня есть несколько флэш-SWF-файлов, которые я загружаю в другой SWF-файл, и я могу получить доступ к общедоступным функциям этих флэш-SWF-файлов верхнего уровня, однако верхний уровень Flash Builder / Flex SWF-файлов это основной mxml файл, а не мой поддельный корень класса as3. Конечно, я должен подумать, что у меня есть способ получить доступ к методам класса as3 компонента mxml, но для сохранения структуры с такой же структурой я могу обойти необходимость изменять скрипты загрузчика. У кого-нибудь есть идеи?

1 Ответ

3 голосов
/ 16 июня 2011

(Обратите внимание, что я изменил ваш закрывающий тег ниже. Если вы его пропустите, это вызовет головную боль.

Похоже, все, что вам нужно сделать, это добавить идентификатор в свой пользовательский класс:

<com id="myCustomClass">
    </com:MyAS3DocClass>

И тогда вы можете просто получить доступ к этому значению как имени переменной внутри тега скрипта:

        public function call_from_outside():void
        {
            myCustomClass.hitme();
            //other stuff
        }

И ЗДЕСЬ ПОЧЕМУ!

Когда вы назначаете идентификатор тегув файле MXML это то же самое, что добавить public var <your-variable-name-here>:<tag-class> к файлу AS (конечно, это делается компилятором, поэтому вам не нужно об этом беспокоиться).После того, как вы назначите идентификатор для MyAS3DocClass, он сразу станет общедоступной переменной.Если это общедоступная переменная, ее можно использовать в публичных, защищенных, внутренних, пространствах имен и частных функциях!

Если вам не нравится эта идея, а ваш пользовательский класс - DisplayObject, вы также можетесделать это:

<com:MyAS3DocClass name="myCustomClass" />

затем в теге script:

        public function call_from_outside():void
        {
            MyAS3DocClass(getChildByName("myCustomClass")).hitme();
            //other stuff
        }
...