2009-08-26 5 views
1

내 질문을 설명하기. 다음 코드 스 니펫을 가정 해보십시오.Flex 및 Actionscript의 구성 요소 이름 및 ID는 어디에서 왔습니까?

<?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> 

이 스크립트의 동작은 분명해야합니다. "Create Button"버튼을 누를 때마다 "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 객체는 생성되고 할당 된 메모리입니다. "Create Button"을 클릭 할 때마다 Button 클래스의 새 인스턴스를 만들고 VBox 객체에 자식으로 추가하고 있습니다. 객체가 생성 될 때 객체에 추가 된 숫자의 의미 또는 의미는 무엇인지 궁금합니다.

답변

4

Flex가 오픈 소스이므로 코드에서 이러한 종류의 것을 추적 할 수 있다는 것을 잊지 마십시오.

Flex 인스턴스의 인쇄 가능한 이름을 생성하는 것으로 보이는 NameUtil.displayObjectToString이라는 함수를 찾았습니다. name 속성을 만드는 NameUtil.createUniqueName도 있습니다.

코드를 살펴 보겠습니다. 기본적으로 createUniqueName은 getQualifiedClassName을 분할하여 패키지 세부 정보없이 클래스 이름 만 얻습니다. NameUtil에는 정적 카운터가있어서 그 이름의 끝에 추가됩니다. 따라서 Button15은 응용 프로그램에서 만든 15 번째 FlexSprite입니다.

displayObjectToString은 "."에 이름을 결합하는 부모를 통한 구성 요소 체인을 제외하면 너무 복잡하지 않습니다.

/** 
* 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; 
} 

그것은 말한다 : "이 값은 객체의 인스턴스 이름이됩니다"그리고이 사실로 보이지만 내가 찾을 수없는주의 할


한 가지 UIComponent.as의 주석입니다 out 여기서 id에서 name으로 지정이 발생합니다. 컴파일하는 동안 변환 될 때 MXML에서 생성되는 AS3 코드에있을 수 있습니다.

+0

제임스에게 감사드립니다. –

관련 문제