Apache flex 如何在弹出窗口中设置公共变量?
我试图在titlewindow pupup中设置一个变量,并在脚本部分使用它。变量没有被设置,我不知道为什么 这是我的Main.mxml文件: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:
<?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);