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代码中