0

次のカスタムコンポーネントがあるとします。

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
    <![CDATA[
        [Bindable]
        public var prop:String;

        private function formatProp() : String {
            return "Hello, " + prop;
        }

    ]]>
    </fx:Script>

    <s:Label text="User: {prop}"/>
    <s:Label text="Greeting: {formatProp()}"/>
</s:Group>

このようにアプリケーションに追加すると、次のようになります。

<local:MyComponent prop="Hello"/>

結果は次のようになります。

ユーザー:マーク
あいさつ:こんにちは、null

Flexはprop、子ラベルを初期化した後でカスタムコンポーネントを設定しているようです。そのため、ユーザーラベルを設定するには、プロパティchangedイベントに依存しています。

最初にバインディングを評価する前に、Flexにコンポーネントのすべてのプロパティが設定されるのを待たせるエレガントな方法はありますか?

注:formatProp関数は簡単で、インラインに含めることができますが、これは単純化された例にすぎません。

4

2 に答える 2

1

「エレガントな方法」は、後でプロパティを変更できるように、実際にデータバインディングを提供することです。あなたの最初のアイデアは、Cornel から提供された回答を使用してうまく機能しているように見えました。実際の質問は、データバインディングが機能していないことを知っていて、変数の初期設定を延期したかったように聞こえたので、これについて言及したかっただけです。

ところで、(mxml ではなく) Actionscript でカスタム コンポーネントを作成する場合は、反対の問題に直面することになります: 実際に子を作成する前にプロパティが設定されるため、実際に影響を与える必要がある場合はそれらをバッファリングする必要がある場合があります。いくつかの子のプロパティ。

于 2010-06-22T11:09:53.403 に答える
0

コンポーネントのライブサイクルとは関係がなく、バインディング ルールとは関係ありません。関数「formatProp」は、prop が変更されたときに呼び出されるように、パラメーター「prop」をパラメーターとして受け取る必要があります。このコードを試してください:

        private function formatProp(props:String) : String {
            return "Hello, " + props;
        }
        <s:Label text="Greeting: {formatProp(prop)}"/>
于 2010-04-16T15:36:55.887 に答える