カスタムコンポーネントと呼び出し元の名前の関係
例えば、以下のような配置を考えます。
┬Test.mxml └jp─ne─sakura─hl2─Text.as
この時 Text.mxml で以下のように記述します。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()"> <mx:Script> <![CDATA[ import jp.ne.sakura.hl2.*; public function init():void { var t:Test = new Test(); this.addChild(t); } ]]> </mx:Script> </mx:Application>
Text.as の方には適当なコンポーネントが定義されているものとお考え下さい。これをコンパイルすると問題なく通るのですが…実行時にブラウザがクラッシュします。
一方で、このように記述すると問題なかったりします。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:hl2="jp.ne.sakura.hl2.*"> <hl2:Test /> </mx:Application>
最初は原因不明だったのですが、どうやら前者は呼び出し時に Test.mxml の方を呼び出そうとしてしまう様子。その結果、自身を延々と呼び出し続けてスタックオーバーフローが起こってしまったと。
同じパッケージ内で同じ名前をつけた mxml と as ファイルが混在しているとコンパイル時に警告が出るのですが、外部から呼び出す場合はそこまで見ていないのかもしれません。
ともかく、本日のまとめ。(特に自分が作っていない)外部ライブラリなどを読み込むときは、名前の確認をきちんと行う事!