Flex如何在actionscript中更改按钮状态?

时间:2012-02-15 21:53:07

标签: actionscript-3 flex flex4 flex4.5

我可以这样做:

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

但是下面的代码给了我一个错误。

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

如何在ActionScript中编码 enabled.State1

由于

2 个答案:

答案 0 :(得分:3)

我知道这不是你想听到的,但无论如何它仍然存在:为什么你想这样做?状态的整个目的是你不必编写大量的ActionScript来做同样的事情。

为什么你不能那样做

通过在ActionScript中编写Btn.enabled.State1,你实际上是在说:给我一个名为'enabled'的布尔实例名为'State1'的属性。显然,这将无法工作,因为布尔值没有这样的属性。您混淆了MXML点(。)表示法 - 用于根据状态为属性赋值 - 使用ActionScript点表示法 - 用于读/写属性。

解决方案或尽可能接近

由于您将在MXML中使用此功能的本质,因此您无法完全按照ActionScript中的要求进行操作。接下来最好的事情是听取StateChangeEvent根据新的州名设置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;
    }
}

(我使用与詹姆斯回答相同的状态)

答案 1 :(得分: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