说明我的问题。假设以下代码段:
<?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>
此脚本的行为应该是显而易见的。每次单击“创建按钮”按钮都会生成一个标签为“Foo”的新按钮。代码的作用以及代码的作用对我来说是有意义的。我的问题是关于控制台输出。当我在调试模式下运行应用程序并单击“创建按钮”四次时,我在控制台中获得以下内容:
New Button Created [main0.btncontainer.Button15]
New Button Created [main0.btncontainer.Button19]
New Button Created [main0.btncontainer.Button23]
New Button Created [main0.btncontainer.Button27]
我的问题是附加到对象名称的数字来自哪里?例如Button15,19,23,27 ......等?背景中是否存在某种包含对象的数组,这是一个索引值吗?这是某种内部反击吗?这是某种指针值吗?在我的测试中,至少,为什么它似乎总是遵循相同的模式15,19,23,27 ......在这种情况下每次相隔4个?
我从概念上理解这里发生了什么。生成一个新的Button对象并分配内存。每次单击“创建按钮”时,我都会创建一个Button类的新实例,并将其作为子项添加到VBox对象中。我只是好奇在创建对象时附加到数字的数字的含义或意义是什么?
答案 0 :(得分:4)
不要忘记,因为Flex是开源的,所以你可以在代码中跟踪这类事情。
我找到了一个名为NameUtil.displayObjectToString
的函数,它似乎负责创建Flex实例的可打印名称。还有NameUtil.createUniqueName
可以创建name
属性。
查看代码,但基本上createUniqueName拆分getQualifiedClassName
以获取没有包详细信息的类名。 NameUtil有一个静态计数器,然后将其附加到该名称的末尾。所以Button15
是您的应用程序创建的第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;
}
它说:“这个值成为对象的实例名称”,虽然看起来是真的但我找不到 where 从id到name的赋值发生。它可以在编译期间转换时从MXML生成的AS3代码中。