動的に配置されたFlexコンポーネント
-
03-07-2019 - |
質問
現在のプロジェクト(Flashプレーヤーで実行されるFlexアプリ)には、フォーム上のコンポーネントの任意のサブセットを表示し、アプリケーションの状態の特定の側面に基づいて他のすべてのコンポーネントを非表示にする必要があります。約12の異なるテキストボックスとドロップダウンがありますが、一部は以前に入力されたユーザーデータに基づいて無関係になり、この特定のフォームに到達したときにそれらを表示したくありません。このフォームが表示されるたびに、これらのコンポーネントの多くの順列のいずれかを表示する必要があります。
この問題に取り組む最善の方法を決定しようとしています。必要なすべてのコントロールを備えたCanvas(または他のコンテナ)を作成し、不要なコントロールにvisible = falseを設定する必要がありますか?問題は、レイアウトが適切に見えるようにすることです。隠されたコントロールがあったはずの場所に隙間ができたくありません。
私が考えたもう1つのオプションは、TextInputやCheckBoxなどのコンポーネントを動的にインスタンス化してからcontainer.addChild(control)を呼び出して、コンポーネントを構築し、ギャップの問題。
これはflexで慣用的な解決策を持っている問題のように思えますが、それが何であるかはわかりません。これらのアイデアはどちらも素晴らしいとは思えないので、他の誰かがより良いアイデアを持っているかどうか疑問に思っています。
解決
これが良い解決策かどうかはわかりませんが、まったく同じ状況にあったときは、基本的に最初の方法を使いました。 visible = false
を設定し、 includeInLayout = false
を設定して、これらの" gaps"を防ぎます。あなたが話していた。これは非常にシンプルなソリューションであり、非常に簡単かつ迅速に実装できます...おそらく誰か他の誰かがもっと慣用的なことを知っています。
他のヒント
これを行うためのベストプラクティスの方法は、状態を使用することです。例:
<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 =&quot; State1&quot;を呼び出します。状態を使用して、コンポーネントを選択的に表示および非表示にできます。
フレックスステートチュートリアルのグーグル検索を行い、ステートのしくみを適切に理解するためにいくつか試してみることをお勧めします。
州で対応できない場合は、コンポーネントのライフサイクルを説明する記事をご覧ください。
Canvasなどのflexコンポーネントを拡張するクラスを作成する場合、createChildrenをオーバーライドする関数内のすべてのコンポーネントを定義します。 updateDisplayListをオーバーライドする別の関数でレイアウトを再検討します
- Flexコンポーネントのライフサイクル @flexcomps
- コンポーネントクラス-パート3 @PeterEnt
- Flexコンポーネントライフサイクル @guavus
- カスタムFlexコンポーネント開発について @billWhite