3

現在のプロジェクト (Flash Player で実行される Flex アプリ) で、アプリケーションの状態の特定の側面に基づいて他のすべてのコンポーネントを非表示にしながら、コンポーネントの任意のサブセットをフォームに表示する必要があります。約 12 種類のテキスト ボックスとドロップダウンがありますが、以前に入力したユーザー データに基づいて無関係になるものもあり、この特定のフォームに到達したときにそれらを表示したくありません。このフォームが表示されるたびに、これらのコンポーネントの多くの順列のいずれかを表示する必要があります。

この問題にアプローチする最善の方法は何かを決定しようとしています。必要なすべてのコントロールを備えたキャンバス (または他のコンテナー) を作成し、必要のないものに visible = false を設定する必要がありますか? 問題は、レイアウトが適切に見えるようにすることです。非表示のコントロールがあったはずの場所に隙間ができてほしくありません。

私が考えたもう 1 つのオプションは、TextInput や CheckBox などのコンポーネントを動的にインスタンス化し、container.addChild(control) を呼び出してコンポーネントを構築し、ギャップの問題を心配する必要がないメカニズムを持つことです。

これはフレックスで慣用的な解決策がある問題のようですが、それが何であるかはわかりません。これらのアイデアはどちらも素晴らしいとは思えないので、他の誰かがより良いアイデアを持っているかどうか疑問に思っています.

4

3 に答える 3

5

これを行うためのベスト プラクティスの方法は、状態を使用することです。例えば:

<mx:states>
    <mx:State name="State1">
        <mx:AddChild position="lastChild">
            <components.../>
        </mx:AddChild>
    </mx:State>
    <mx:State name="State2">
        <mx:AddChild position="lastChild">
            <mx:Canvas.../>
        </mx:AddChild>
        <mx:AddChild position="lastChild">
            <mx:VBox.../>
        </mx:AddChild>
    </mx:State>
</mx:states>

次に、コード内で this.currentState = "State1" を呼び出して最初の状態などを有効にします。状態を使用すると、コンポーネントを選択的に表示および非表示にできます。

フレックス状態のチュートリアルをグーグルで検索し、状態がどのように機能するかを正しく理解するためにいくつか試してみることをお勧めします。

于 2008-10-16T20:14:17.173 に答える
4

これが良い解決策かどうかはわかりませんが、まったく同じ状況にあったとき、基本的に最初の方法を実行しました。あなたが話していたそれらの「ギャップ」を防ぐために設定しvisible = false、設定します。includeInLayout = falseこれは非常に単純なソリューションであり、実装が非常に簡単で迅速です...おそらく他の誰かがもっと慣用的なものを知っています。

于 2008-10-16T20:10:07.897 に答える
0

状態がうまくいかない場合は、コンポーネントのライフサイクルを説明する記事をチェックしてください。

Canvas のようなフレックス コンポーネントを拡張するクラスを作成する場合、createChildren をオーバーライドする関数ですべてのコンポーネントを定義します。updateDisplayList をオーバーライドする別の関数でレイアウトを再確認します。

于 2008-10-24T11:08:49.517 に答える