2012-02-15 36 views
0

我可以做到這一點:Flex如何更改actionscript中的按鈕狀態?

<s:Button id="Btn" enabled.State1="false" /> 

但下面的代碼是給我的錯誤。

private function enableDisable():void{ 
     Btn.enabled.State1="false"; //Error: Access of undefined property State1 
     } 

如何編寫enabled.State1在ActionScript?

謝謝

回答

3

我知道這是不是你想要聽到的,但在這裏它去反正:你想這樣做,爲什麼呢?這些州的全部目的是,你不必編寫大量的ActionScript來做同樣的事情。 「啓用」給我叫Boolean實例名爲「狀態1」的屬性:

爲什麼你不能那樣做

通過寫在ActionScript Btn.enabled.State1你基本上說。很明顯,這是行不通的,因爲布爾沒有這樣的屬性。您將MXML點(。)表示法(用於將值分配給基於狀態的屬性)與ActionScript點符號混淆 - 用於讀取/寫入屬性。

溶液或接近它得到

由於它的這個特點,你會用它MXML,你不能做你問什麼在ActionScript的本質。接下來最好的事情是聽取StateChangeEvent en根據新的狀態名稱設置Button的'enabled'屬性。

addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, onStateChange); 

private function onStateChange(event:StateChangeEvent):void { 
    switch (event.newState) { 
     case "wrong": Btn.enabled = false; break; 
     case "correct": Btn.enabled = true; break; 
    } 
} 

(我使用的是相同的狀態在詹姆斯的回答)

+0

是的,我知道使用MXML是更好,但能夠使用它在AS將使編碼更靈活一點。由於MXML最終會轉化爲AS代碼,因此我認爲有一種簡單的方法可以在AS中使用它。使用事件來改變狀態可能有點沉重。我可能是錯的,但無論如何感謝。 – jameslcs 2012-02-16 16:53:47

+0

@jameslcs我必須承認,我還沒有看過這個功能生成的AS代碼,但我認爲它幾乎完成了我所寫的內容(即跟蹤狀態改變事件並相應地設置屬性),但是更通用辦法。 – RIAstar 2012-02-16 17:20:15

0

我想你可能會在錯誤的上下文中使用狀態。例如,您的組件中包含一個用戶輸入並在其旁邊有一個按鈕。該按鈕僅在輸入正確的單詞時啓用。您將爲組件定義兩種狀態,可能是correctwrong

<s:states> 
    <s:State name="wrong" /> 
    <s:State name="correct" /> 
<s:states> 

你可以這樣,類似於你在前面已經做了什麼,設置取決於狀態的按鈕各個屬性:

<s:Button id="Btn" enabled.wrong="false" enabled.correct="true" /> 

默認情況下,組件的狀態會wrong。處理完用戶輸入並檢查是否輸入了正確的單詞後,組件的狀態將更改爲correct

通常,組件的狀態特定屬性是在編譯時設置的,組件本身的狀態在運行時發生更改。

這裏是an overview of states in Flex 4.6

+0

我的客人,您會錯過我的觀點 – jameslcs 2012-02-16 17:05:34