在Flex中,我们可以通过以下方式将状态分配给元素:
<s:Button id="mybtn" includeIn="mystate" label="button label"/>
我们如何使用ActionScript执行includeIn
?
谢谢。
答案 0 :(得分:0)
状态是MXML概念,而不是AS概念。在AS中,您必须在覆盖函数set currentState中编写自己的逻辑。
override public function set currentState(value:String):void
{
super.currentState = value;
//write your logic for states
}
答案 1 :(得分:0)
includeIn
伪属性仅存在于MXML语言中。我称之为伪属性,因为它不映射到属性或样式(在您的示例中为Button类)。
相反,它是旧mx AddItems标记的简写符号。在该语法中,您的示例将如下所示:
<mx:states>
<mx:State name="normal"/>
<mx:State name="mystate">
<mx:AddItems items="{mybtn}"/>
</mx:State>
</mx:states>
<mx:Button id="mybtn"/>
我提到这一点,因为为includeIn
生成的ActionScript代码非常相似。这就是它的样子:
states = [
new State ({
name: "normal",
overrides: []
}),
new State ({
name: "mystate",
overrides: [
new AddItems().initializeFromObject({
itemsFactory: _TestFlex_Button1_factory,
destination: null,
position: "first"
})
]
})
];
不同之处在于它使用工厂来实例化Button
请注意,如果您对从MXML代码生成的ActionScript代码感兴趣,只需将keep-generated-actionscript
标志传递给编译器即可查看(参见mxmlc compiler options)。
当然如果你真的想'手动'写出那个逻辑(我不会),可能更容易覆盖setCurrentState()或监听CURRENT_STATE_CHANGE事件,并调用{{1 }或addElement()
取决于removeElement()
。