Как установить публичную переменную во всплывающем окне? - PullRequest
0 голосов
/ 09 февраля 2011

Я пытаюсь установить переменную в заголовке окна заголовка и использовать ее в разделе сценария.Переменная не установлена, и я не знаю почему.

Вот мой файл Main.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" minWidth="955" minHeight="600" creationComplete="application1_creationCompleteHandler(event)">
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;
        import mx.managers.PopUpManager;

        protected function application1_creationCompleteHandler(event:FlexEvent):void
        {
            var test:TestWindow = TestWindow(PopUpManager.createPopUp(this,TestWindow,true));
            PopUpManager.centerPopUp(test);
            test.testText = 'test 2';
            test.bol = true;
        }

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

Вот мой файл titleWindow:

<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"
           close="PopUpManager.removePopUp(this);" creationComplete="titlewindow1_creationCompleteHandler(event)">
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;
        import mx.managers.PopUpManager;

        [Bindable] public var testText:String = 'test 1';
        public var bol:Boolean = false;

        protected function titlewindow1_creationCompleteHandler(event:FlexEvent):void
        {
            if(bol){
                trace('Boolean is true');
            }
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Label text='{testText}'/>
</s:TitleWindow>

Проблема в том, что метка действительно меняется с «теста 1» на «тест 2», но переменная bol не будет установлена, почему это так?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

NoobsArePeople2 на 100% правильно говорит о том, что происходит с жизненным циклом. Быстрый и грязный обходной путь для этого заключается в использовании PopUpManager.addPopUp () вместо createPopUp ():

var test:TestWindow = new TestWindow();
test.testText = 'test 2';
test.bol = true;
PopUpManager.addPopUp(test, this, true);
PopUpManager.centerPopUp(test);

Это должно позволить вам установить значения в TestWindow до его фактической инициализации.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/PopUpManager.html

0 голосов
/ 10 февраля 2011

Событие creationComplete возникает, когда ваше TitleWindow было полностью создано, и запускается только один раз (см. жизненный цикл компонента ).

В вашем случае это происходит в файле Main.mxml, когда вы добавляете всплывающее окно с PopUpManager.centerPopUp(test);.bol обновляется, вы просто не видите этого из оператора трассировки, потому что событие creationComplete уже сработало.

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

В целом, я считаю, что лучшим способом сделать это было бы использование методов получения и установки и привязки данных (или Flexметоды аннулирования, описанные в этой первой ссылке).

Примечание: эти ссылки предназначены для Flex 3, но, насколько мне известно, все это верно для Flex 4.

...