2011-02-09 76 views
0

我想在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> 

這裏是我的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變量不會被設置,爲什麼?

回答

0

當您的TitleWindow已完全創建並且只觸發一次時,將觸發creationComplete事件(請參閱component lifecycle)。

在您的情況下,當您將彈出式菜單添加到PopUpManager.centerPopUp(test);時,發生在您的Main.mxml文件中。 bol正在更新,因爲creationComplete事件已經被觸發,所以您只是沒有從跟蹤語句中看到。

如果您想用當前設置更改bol的值,則需要在打開彈出窗口之前執行此操作。

一般來說,我覺得這樣做的更好方法是使用getters and setters和數據綁定(或者在第一個鏈接中描述的Flex的無效方法)。

注:提供這些鏈接是Flex 3的,但到目前爲止,我知道這一切持有Flex 4中的真實

0

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