2009-08-26 6 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> 

このスクリプトの動作は明白です。 「ボタンを作成」ボタンをクリックするたびに、ラベルが「Foo」の新しいボタンが生成されます。コードが何をして、なぜそれが私にとって理にかなっているのですか?私の質問は、コンソールの出力についてです。私は、デバッグモードでアプリケーションを実行し、クリックすると「ボタンの作成」私は私のコンソールで、次の取得4回:

New Button Created [main0.btncontainer.Button15] 
New Button Created [main0.btncontainer.Button19] 
New Button Created [main0.btncontainer.Button23] 
New Button Created [main0.btncontainer.Button27] 

私の質問はどこオブジェクト名に付加番号から来たんですか?例えばボタン15,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

ありがとうございました。 –

関連する問題