2012-03-24 61 views
0

如何在Flex(Flash Builder 4)中啓用或禁用一組組件?Flex - 如何禁用/啓用一組組件(或更改屬性)

例如,如果我有一個包含多個字段的窗口,我想根據用戶權限將其禁用。

我知道我可以添加啓用=「true」或「啓用=」假」,我也可以用啓用=‘{writeAccessVar}’

不過,我正在尋找更多的想法,因爲我屏幕上可能有多組字段,或者更復雜的用戶權限。

例如,我現在將有一個字段具有寫入權限,屏幕上的其他字段只能讀取某個用戶級別的信息

對於更高級別的用戶,所有字段都是可寫的。更低級別,全部爲只讀。

謝謝!

回答

0

您可以添加一個變量accessLevel等於用戶的訪問級別:

[Bindable] 
var accessLevel:int = 0; // 0: low level, 1: next level, 2: next level, an so on 

然後,您可以根據accessLevel設置各個部件的enabled屬性:

enabled="{accessLevel >= 0}" 

爲了提高代碼的可讀性,您可以聲明不同級別的常量

public static const ACCESS_LEVEL_LOW:int = 0; 
public static const ACCESS_LEVEL_NORMAL:int = 1; 
public static const ACCESS_LEVEL_HIGH:int = 2; 


// ... 
enabled="{accessLevel >= ACCESS_LEVEL_LOW}" 
// ... 
enabled="{accessLevel >= ACCESS_LEVEL_NORMAL}" 
// ... 
enabled="{accessLevel >= ACCESS_LEVEL_HIGH}" 
+0

到目前爲止,我決定對此稍做改動。我把它放在我的組件中:enabled =「{app.chkAcc('NW')}」chkAcc是一種方法,我將NW的組名稱傳遞給它。然後在該方法中,我檢查用戶是否訪問級別(或組成員資格),並根據它們是否爲NW成員返回true/false。 – 2012-03-24 14:05:35

+0

我遇到的一個問題是 - 當我的應用第一次加載時,我有一個被禁用的按鈕,因爲用戶沒有登錄。用戶登錄後,我希望啓用按鈕,但事實並非如此。它不會調用我的方法,所以我假設我必須進行一些刷新以告訴該窗口重新繪製所有組件。我試過myWindow.invalidateDisplayList(); myWindow.validateNow(); ,但沒有區別? – 2012-03-24 14:36:08

+0

您必須像我在示例中那樣使用可綁定變量。例如,將'enabled =「{app.chkAcc('NW')}''改爲'enabled =」{app.chkAcc(accessLevel)}「',其中'accessLevel'是一個可綁定的變量。實際上,這只是通過調用函數:'enabled =「{app.chkAcc(accessLevel)}」'的一個測試來取代我通過'enabled =「{accessLevel> = 0}」進行的測試。 – sch 2012-03-24 14:47:38