从ActionScript设置Spark状态特定的属性

时间:2013-07-28 11:16:11

标签: actionscript-3 flex

我希望这很容易,但很多Google在断点上搜索和检查对象并没有找到答案。

我可以在MXML中定义状态:

<s:states>      
    <s:State name="state_1" />      
    <s:State name="state_2" />      
</s:states>

然后我可以这样做:

<s:Label id="lblTest" text="Hello" x.state_1="20"  x.state_2="100" />

在Actionscript中我可以设置属性值:

lblTest.x = 150;

问题:无论当前状态如何,如何从Actionscript为lblTest设置x.state_1和x.state_2?

1 个答案:

答案 0 :(得分:3)

在Actionscript中工作时,没有什么比这更简单了。当您使用特定于州的属性编译mxml文件时,像这样的Actionscript代码将在其构造函数中生成:

states = [
  new State ({
    name: "state_1",
    overrides: [
      new mx.states.SetProperty().initializeFromObject({
        target: "lblTest",
        name: "x",
        value: 20
      })
    ]
  })
  ,
  new State ({
    name: "state_2",
    overrides: [
      new mx.states.SetProperty().initializeFromObject({
        target: "lblTest",
        name: "x",
        value: 100
      })
    ]
  })
];

如果您在Actionscript中创建状态,则可以执行类似的操作。如果要修改已设置的特定于状态的属性,则不是那么容易。您必须在每个州的SetProperty数组中找到overrides对象并替换/修改它。

实际上,状态特定属性的强大功能是能够在MXML中很好地定义它们。不要忘记您可以使用绑定来设置属性的值,以基本上获得您想要的免费内容:

<s:Label id="lblTest" text="Hello" x.state_1="{state_1_value}"  x.state_2="100" />