2009-02-23 59 views
0

我一直在網上搜索這個,但我還沒有找到答案。我有標題窗口的數組數據,我需要關閉標題窗口後直接傳遞給主窗口。Flex:如何在關閉標題窗口後將標題窗口中的值傳遞給主窗口?

我的繼承人在主窗口代碼

private function showWindow():void 
    { 
    var dataCntnrsForTxt: Array = new Array; 
    var ttlWindow:addQuest=addQuest(PopUpManager.createPopUp(this, addQuest, true)); 

    pointer.x=btnaddQuestion.x; 
    pointer.y=btnaddQuestion.y;     
    pointer=btnaddQuestion.localToGlobal(pointer); 
    ttlWindow.x=pointer.x-500; 
    ttlWindow.y=pointer.y; 


    ttlWindow.dataCntnrsForTxt= dataCntnrsForTxt;      

    var i: int; 
    for (i = 0; i < dataCntnrsForTxt.length; i++) 
{ 
    var lblshow: Label = new Label; 
     lblcntnrs.addChild(lblshow); 
     lblshow.text = dataCntnrsForTxt[i];  
    } 


    } 

我想關閉標題窗口

繼承人的標題窗口

[Bindable] 
    public var dataCntnrsForTxt: Array = new Array; 

    private function trythis():void 
    { 
    var i:int; 
    for (i = 0; i < contnrs.numChildren; i++) 
    { 
    dataCntnrsForTxt.push(TextInput(contnrs2.getChildAt(i)).text);    
    } 
    PopUpManager.removePopUp(this); 
    } 

我的代碼後,自動顯示結果主窗口我是一名flex編程的新手。預先感謝您的幫助

+0

請正確縮進您的代碼。 – 2009-02-23 09:50:40

回答

2

事件是一種常見的方法,因爲他們將標題窗口從主窗口中分離出來,因爲另一個答案很好而且很好。他們是進入Flex並且值得付出努力的好習慣,所以這可能是最好的答案。

把你的數組作爲一個公共可綁定變量放在主窗口並從你的標題窗口填充是第二種方法,但我不喜歡這種方法,因爲這兩個組件知道對方太多,而你依靠數據綁定很可能比你實際需要的要多(例如,如果你將主窗口中的控件綁定到同一個數組上,它會在你的標題窗口顯示時在後臺忙碌更新,這意味着你有一個非常煩人的「取消「處理,如果你需要一個)。

只要給你第三種方法,你可以傳遞一個函數給你的標題窗口,當窗口關閉時它會被調用。例如在標題窗口中,您必須聲明...

public var onClose:Function; 

自己寫的標題窗口上的處理程序,綁定到close事件,調用外部函數,並傳遞陣列...

private function doClose():void 
{ 
    if (onClose != null) onClose(myArray); 
} 

然後調用者有一個可以調用的函數...

private function handleTitleWindowClose(myArray:Array):void 
{ 
    // do something in here 
} 

,你傳遞給TitleWindow類你展示它之前...

ttlWindow.onClose = handleTitleWindowClose; 

這可能不如事件,但比共享魔術變量更好。它不是一個明確的API,因爲onClose的參數沒有記錄在任何地方,編譯器也不會在參數列表中找到錯誤,但它是有用的模式。

HTH

+0

謝謝。現在工作正常... – Jejad 2009-02-25 02:12:43

0
var dataCntnrsForTxt: Array = new Array; 

這是一個局部變量,它的作用域限於showWindow()函數。有一次,你沒有了,你不應該玩它。或者,也可以從函數中返回(而不是void使用數組)。

[Bindable] 
public var dataCntnrsForTxt: Array = new Array; 

這樣比較好。你現在可以從任何地方訪問它。請注意,如果您要綁定它,總是最好使用ArrayCollection。這裏的柔性3.2 documentation

當定義了使用的陣列作爲數據綁定表達式的源數據綁定表達式,該陣列應類型的ArrayCollection因爲ArrayCollection類調度一個事件當陣列或陣列元素更改爲觸發數據綁定。例如,對ArrayCollection.addItem(),ArrayCollection.addItemAt(),ArrayCollection.removeItem()和ArrayCollection.removeItemAt()的調用都會觸發數據綁定。

你可以試一下ArrayCollection

3

我建議在標題窗口關閉時調度事件。該事件還可以將要返回的值存儲在屬性中。然後,在您的主應用程序中處理該事件。