Actionscript 3 Flex和Actionscript中的组件名称和ID,它们来自哪里?

Actionscript 3 Flex和Actionscript中的组件名称和ID,它们来自哪里?,actionscript-3,apache-flex,flex3,flex-builder-3,Actionscript 3,Apache Flex,Flex3,Flex Builder 3,来说明我的问题。假设以下代码段: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ import mx.controls.Button; private function createButton():void

来说明我的问题。假设以下代码段:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
    <![CDATA[
        import mx.controls.Button;

        private function createButton():void
        {
            var myButton:Button = new Button();
            myButton.label = "Foo";
            this.btncontainer.addChild(myButton);
            trace ("New Button Created [" + myButton.toString() + "]"); 
        }       
    ]]>
</mx:Script>

<mx:Button label="Create Button" click="createButton()" />
<mx:VBox id="btncontainer" />

</mx:Application>
我的问题是附加到对象名称的数字来自哪里?e、 g.按钮15、19、23、27。。。等背景中是否有某种数组保存对象,这是索引值?它是某种内部计数器吗?这是某种指针值吗?至少在我的测试中,为什么它总是遵循相同的模式15,19,23,27。。。在这种情况下,每次间隔4


我从概念上理解这里发生的事情。生成一个新的按钮对象并分配内存。每次单击“Create Button”,我都会创建Button类的新实例,并将其作为子对象添加到VBox对象中。我只是好奇在创建对象时附加到对象上的数字的含义或意义是什么?

不要忘记,因为Flex是开源的,所以您可以在代码中跟踪这类内容

我发现了一个名为
NameUtil.displayObjectToString
的函数,它似乎负责创建Flex实例的可打印名称。还有创建
name
属性的
NameUtil.createUniqueName

看一下代码,但基本上创建UniqueName拆分
getQualifiedClassName
,只获取类名而不获取包的详细信息。NameUtil有一个静态计数器,然后将其附加到该名称的末尾。因此,
按钮15
是应用程序创建的第15个FlexSprite

displayObjectToString
并不太复杂,只不过它遵循组件链,通过父级将名称连接到一个“.”上


需要注意的一点是UIComponent.as中的注释:

/**
 *  ID of the component. This value becomes the instance name of the object
 *  and should not contain any white space or special characters. Each component
 *  throughout an application should have a unique id.
 *
 *  <p>If your application is going to be tested by third party tools, give each component
 *  a meaningful id. Testing tools use ids to represent the control in their scripts and
 *  having a meaningful name can make scripts more readable. For example, set the
 *  value of a button to submit_button rather than b1 or button1.</p>
 */
public function get id():String
{
    return _id;
}
/**
*组件的ID。此值将成为对象的实例名称
*并且不应包含任何空格或特殊字符。每个组件
*整个应用程序应具有唯一的id。
*
*如果您的应用程序将由第三方工具进行测试,请给出每个组件
*一个有意义的id。测试工具使用id在其脚本和脚本中表示控件
*具有有意义的名称可以使脚本更具可读性。例如,设置
*提交按钮(而不是b1或按钮1)的按钮的值

*/ 公共函数get id():字符串 { 返回_id; }

它说:“这个值成为对象的实例名”,尽管这似乎是真的,但我无法找出从id到名称的赋值发生在哪里。它可能在编译过程中转换MXML时从MXML生成的AS3代码中。

不要忘记,由于Flex是开源的,您可以在代码中跟踪这类内容

我发现了一个名为
NameUtil.displayObjectToString
的函数,它似乎负责创建Flex实例的可打印名称。还有创建
name
属性的
NameUtil.createUniqueName

看一下代码,但基本上创建UniqueName拆分
getQualifiedClassName
,只获取类名而不获取包的详细信息。NameUtil有一个静态计数器,然后将其附加到该名称的末尾。因此,
按钮15
是应用程序创建的第15个FlexSprite

displayObjectToString
并不太复杂,只不过它遵循组件链,通过父级将名称连接到一个“.”上


需要注意的一点是UIComponent.as中的注释:

/**
 *  ID of the component. This value becomes the instance name of the object
 *  and should not contain any white space or special characters. Each component
 *  throughout an application should have a unique id.
 *
 *  <p>If your application is going to be tested by third party tools, give each component
 *  a meaningful id. Testing tools use ids to represent the control in their scripts and
 *  having a meaningful name can make scripts more readable. For example, set the
 *  value of a button to submit_button rather than b1 or button1.</p>
 */
public function get id():String
{
    return _id;
}
/**
*组件的ID。此值将成为对象的实例名称
*并且不应包含任何空格或特殊字符。每个组件
*整个应用程序应具有唯一的id。
*
*如果您的应用程序将由第三方工具进行测试,请给出每个组件
*一个有意义的id。测试工具使用id在其脚本和脚本中表示控件
*具有有意义的名称可以使脚本更具可读性。例如,设置
*提交按钮(而不是b1或按钮1)的按钮的值

*/ 公共函数get id():字符串 { 返回_id; }
它说:“这个值成为对象的实例名”,尽管这似乎是真的,但我无法找出从id到名称的赋值发生在哪里。它可能位于编译期间转换MXML时从MXML生成的AS3代码中