Apache flex 如何在弹出窗口中设置公共变量?

Apache flex 如何在弹出窗口中设置公共变量?,apache-flex,actionscript-3,variables,window,public,Apache Flex,Actionscript 3,Variables,Window,Public,我试图在titlewindow pupup中设置一个变量,并在脚本部分使用它。变量没有被设置,我不知道为什么 这是我的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:

我试图在titlewindow pupup中设置一个变量,并在脚本部分使用它。变量没有被设置,我不知道为什么

这是我的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>

这是我的标题窗口文件:

<?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变量,这是为什么?

当标题窗口已完全创建且仅触发一次时,
creationComplete
事件将触发(请参阅)

在您的情况下,当您使用
PopUpManager.centerPopUp(测试)添加弹出窗口时,这会发生在Main.mxml文件中
bol
正在更新,您只是在跟踪语句中看不到,因为
creationComplete
事件已经触发

如果要使用当前设置更改
bol
的值,则需要在打开弹出窗口之前进行更改

总的来说,我觉得更好的方法是使用和数据绑定(或者第一个链接中描述的Flex的失效方法)


注意:提供的这些链接是针对Flex 3的,但据我所知,所有这些都适用于Flex 4。

NoobsRepeapeOple2对生命周期中发生的事情是100%正确的。一个快速而肮脏的解决方法是使用PopUpManager.addPopUp()而不是createPopUp():

这应该允许您在TestWindow实际初始化之前设置它的值

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