Flex元素包括

时间:2013-12-16 06:02:09

标签: flash flex actionscript

在Flex中,我们可以通过以下方式将状态分配给元素:

<s:Button id="mybtn" includeIn="mystate" label="button label"/>

我们如何使用ActionScript执行includeIn

谢谢。

2 个答案:

答案 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()

的值