为什么你可以在Actionscript中更改对象的id但仍然用它的旧id引用它?

时间:2010-10-16 23:02:09

标签: actionscript-3

例如在Flex 4中

?xml version =“1.0”?>     的xmlns:MX = “库://ns.adobe.com/flex/mx”
    的xmlns:S = “库://ns.adobe.com/flex/spark” >

<s:layout> 
    <s:VerticalLayout/> 
</s:layout>

<fx:Script>
    <![CDATA[
        private function setLabel():void {

            trace ("the id is "+myButton.id);
            myButton.id = "yourButton";

        }

    ]]>
</fx:Script>

<s:Button id="myButton" label="Click Me" click="setLabel();"/>

单击按钮两次时的轨迹 'id是myButton',然后是 'id is yourButton'

不仅仅是空闲查询。我希望在用它们填充主应用程序时更改自定义组件的ID

2 个答案:

答案 0 :(得分:0)

我认为在mxml中设置的id的id是变量名,它也设置了内部id(myButton.id =“myButton”)因此你可以将myButton.id更改为“yourButton”,因为id和变量名是不同的属性。

虽然我承认,但很奇怪。

如果您想在填充主应用程序时创建自定义组件,我会采用不同的方法,而不是将它们全部放在mxml中。也许在actionscript中创建组件并将它们设置为mxml最好? (例如,您的主要类是mxml应用程序,然后您有一个后面的类,可以完成创建视图的繁重工作,以及所有自定义命名组件)

答案 1 :(得分:0)

请记住,mxmlc会将MXML解析为ActionScript。 mxmlc使用mxml标记的ID属性在编译时映射到公共类成员。更改ID字段的运行时值将不会更改类结构。

示例:


<MyComponent>
  <Button id="myButton" />
</MyComponent>

编译时,mxmlc将其粗略转换为:


package {
  class MyComponent {

     [Bindable]
     public var myButton:Button;

     // Other junk for class init, etc would show here...

  }
}

然后编译为SWF字节代码。此时,ID属性只是一个属性,与类的功能无关。您必须实际将新的Button实例分配给this.myButton以使其更改。