0

親コンポーネントのセッターを介して、サブコンポーネントのデータパラメーターへの割り当てを伝播しようとしています。このような:

<CustomComponent
     xmlns:mx="http://www.adobe.com/2006/mxml"
     xmlns="components.*"
    >
    <mx:Script>
        <![CDATA[
            public override function set data(val:Object):void
            {
                super.data = val;

                subComponent.data = val; //ref #1
            }
        ]]>
    </mx:Script>
    <CustomSubComponent id="subComponent"
        />
</CustomComponent>

アプリケーションを実行したとき、サブコンポーネントがデータを受信することはありませんでした。デバッグして「ref#1」とマークされた行にステップすると、デバッガーはメソッドからジャンプして、メソッドが完了したかのように別の場所に進みます。何らかの例外またはエラーがスローされたようですが、コンソールはこの割り当ての何が問題になっているのかを示しません。

私はここで愚かなことをしていますか?かなり簡単なようです。

環境:これは、Flex SDK 3.2、Windows上のEclipse用のFlex Builder 3プラグイン、Flash9デバッグバージョンを使用しています。IE7の場合。

注:この特定の例では、意図的にバインドを回避しようとしています。つまり、データをバインドするのではなく、手動でサブコンポーネントにプッシュできないのはなぜですか?

4

2 に答える 2

2

Flexは、データセッター内のエラーを抑制します。これは、データがnullになることが多いためです。問題は、セットデータが呼び出されたときにサブコンポーネントが初期化されていないことです。バインディングを実際に使用できない場合(簡単でクリーンな方法)、invalidateProperties / commitPropertiesで初期化されるまで、サブコンポーネントのデータの設定を遅らせる必要があります。

データセッターで、invalidateProperties()を呼び出し、変更されたことを示すフラグを設定します。

commitPropertiesをオーバーライドし(superを呼び出すことを忘れないでください)、フラグを確認し、それがtrueの場合は、サブコンポーネントのデータを設定します。

commitPropertiesブロックが呼び出されない場合は、creationCompleteでinvalidatePropertiesを試してください。

于 2009-08-27T21:13:24.940 に答える
0

カスタムコンポーネントとサブコンポーネントはどのコンポーネントに基づいていますか?それらは何を拡張しますか?

HBoxとVBoxを拡張する基本的な例を試しましたが、すべてうまくいきました。

ここで結果を確認できます。ソースビューが有効になっています。

ディスプレイリストに追加されたコンポーネントを拡張しているので、問題はなかったと思います。そのため、測定値やデータなどを保護者に確認するのはライフサイクルの一部です。

それが役に立てば幸い

于 2009-08-26T23:25:05.273 に答える