Flex3mxmlコンポーネントがあるとしましょう。これをAと呼びます。Aには「b」というget/set属性があります。AI内には、mxmlを使用して指定される別の内部コンポーネントCがあります。mxml内でコンポーネントAを「インスタンス化」する場合、宣言時にbの値を指定でき、すべてが正常に機能します。ただし、Actionscriptを使用してコンポーネントを初期化する場合、コンポーネントの属性(この場合は「b」)を設定する前に、まずコンポーネントをレンダリングされたコンテナーに追加する必要があります。これは、属性'b'のセッターがA内のCに何らかの方法でアクセスした場合に発生します。
したがって、これは実行時に失敗します(Cがnullであると表示されます)...
var a:A = new A();
a.b = "woopy"; //Sets the Label (declared in mxml) withn A to "woopy"
this.addChild(a);
一方、次のいずれかが機能します
<customNamespace:A b="woopy"/>
また
var a:A = new A();
this.addChild(a);
a.b = "woopy"; //Sets the Label (declared in mxml) withn A to "woopy"
示されているように、コンポーネントがコンテナに追加された後に属性が設定された場合、ランタイムエラーメッセージはスローされません。わかりました。これは理にかなっています。コンポーネントがコンテナに追加されるまで、コンポーネントの内部は実際には作成されないと思います。それでも、これはちょっと面倒です。コンポーネントの内部がコンテナに追加せずに完全にレンダリングされることを保証する方法はありますか?actionscriptとmxmlを使用しているときの感じ方が気に入らない。基本的に、属性「arguments」を使用せずにmxmlでAを宣言することは、ASでnew演算子を使用してAを宣言することと同等であるという解決策が必要です。少なくとも、Aの内部状態に関しては。