2012-05-17 51 views
0

嗨我們在UI項目中使用Flex 4。在加載應用程序儀表板時,我們得到一組窗格。我們點擊一​​個吊艙並打開弔艙視圖。此窗格視圖包含第一列作爲超鏈接的數據網格。當你點擊超鏈接時,會打開另一個屏幕,這是我們的模塊屏幕。Flex組件沒有被刷新

該模塊屏幕頂部有一個SUBMIT按鈕和一對數據網格。現在我們使用RemoteObject加載網格中的數據。每個網格的父容器都是WindowShade組件。

現在我們的要求是用戶可以在一個或兩個網格中進行修改,然後單擊SUBMIT。取決於用戶修改了哪個網格,我想將相應的窗口陰影設置爲只讀。如果用戶修改了兩個網格,我需要將兩個窗口陰影組件都設爲只讀,並禁用SUBMIT按鈕。 用戶應該能夠在點擊提交時立即看到這個改變,而不關閉屏幕或從屏幕導航。

當用戶第一次打開屏幕時,我們從後端獲得一些狀態,並根據這些狀態,將窗口陰影設置爲只讀並啓用/禁用按鈕。當我單擊SUBMIT時,我仍然會打到後端並獲得狀態,但不會啓用/禁用按鈕或窗口遮罩。

我已經爲我的mxml文件的updateComplete方法寫入了啓用/禁用的邏輯,這是爲swf創建的。

updateComplete在用戶第一次打開屏幕時被調用。當用戶單擊SUBMIT時,它不會被調用。爲什麼這樣?

我已經嘗試使用Loader和SWFLoader加載我的SWF文件,但它不起作用。 var request:URLRequest = new URLRequest(「com/citi/risk/credit/maintenance/view/widgets/CRCMaintenanceModule.swf」); var loader:Loader = new Loader(); loader.load(request);

任何幫助或指針將不勝感激。你可能要考慮

回答

0

兩件事情:

1)總之,FlexEvent.UPDATE_COMPLETE是被分派已完成渲染本身(通過Flex組件的生命週期消失)的事件。這可能會發生一次或多次,具體取決於組件更改的頻率以及狀態需要重新呈現的時間。

此事件的頻率/計時將根據調度它的對象而有所不同。例如,正在調整大小的容器將調度這麼多時間。永不改變的標籤只能做一次。

相反,您應該考慮添加「creationComplete」(FlexEvent.CREATION_COMPLETE)事件偵聽器。 「creationComplete」只發生一次,您可以將偵聽器添加到包含提交按鈕的任何對象。

2)當您單擊提交時,您添加了「updateComplete」偵聽器的對象可能沒有足夠改變,無法通過Flex的組件生命週期。所以沒有事件發出。

爲什麼這種情況不會發生的答案實際上取決於您添加了事件偵聽器的對象。

您是否曾嘗試在提交按鈕上使用「單擊」處理程序,因此您可以在按鈕被單擊時禁用相應的元素?再次,「點擊」事件將只發生一次,不像「updateComplete」;)

+0

嗨Sunil,我運行在調試模式的應用程序,你說的是正確的。我還發現,在從遠程對象獲取數據之前,會調用主容器的更新完成。所以我在主容器的更新完成方法中所做的所有狀態檢查都是徒勞的。如何確保在更新完成被調用之前從服務器獲取數據?如果我能夠在更新完成之前獲取數據,我的問題就解決了。 – cyclecount

+0

請勿使用更新完成。也許你的視圖應該有一個默認狀態(禁用的東西),直到收到來自服務器調用的響應。然後啓用東西,然後再次禁用提交按鈕點擊處理程序。 –

+0

再次重申:更新完成意味着對象的一個​​(可能很多)渲染階段已經完成。所以它不適合你在做什麼。 –