我可以这样做:
<s:Button id="Btn" enabled.State1="false" />
但是下面的代码给了我一个错误。
private function enableDisable():void{
Btn.enabled.State1="false"; //Error: Access of undefined property State1
}
如何在ActionScript中编码 enabled.State1 ?
由于
答案 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)
我认为你可能在错误的环境中使用状态。例如,您有一个组件,其中包含一个用户输入,旁边有一个按钮。只有在输入正确的单词时才会启用该按钮。您可以为组件定义两个状态,可能是correct
和wrong
。
<s:states>
<s:State name="wrong" />
<s:State name="correct" />
<s:states>
然后,与上面所做的相似,您可以根据状态设置按钮的各个属性:
<s:Button id="Btn" enabled.wrong="false" enabled.correct="true" />
默认情况下,组件的状态为wrong
。处理完用户输入并检查是否输入了正确的单词后,组件的状态将更改为correct
。
通常,组件的特定于属性的属性在编译时设置,组件本身的状态在运行时更改。