1

わかりました。開いたTitleWindowがあります...そして6つの状態が定義されています。すべてのビューにプレゼンテーションモデルパターンを使用しています。イライラするニュアンスを発見しました。ウィンドウにXXX状態に移行するように指示すると、flexの状態は遅延読み込みを使用するため、コントロールを初期化する必要があります。だから...myTextArea.textが爆破して「アクセスできません...」と言う私のPMコードは、回避策として、コントロールにいくつかのcreationCompleteイベントを作成して、コントロールをPMに登録しました。したがって、状態が変化すると、textareaは最終的に初期化され、creationCompleteでPM.registerTextArea()を呼び出して、それへの参照を設定します。次に、その関数でコードを実行します...myTextArea.text..など。

これは私がそれを嫌うような醜いハックのようです。状態全体が作成されるまで待ってから、PMのコードを呼び出す方法はありますか?私はenterstateを試しました...しかし、このイベントは状態制御の準備ができる前に発生するようです。

コメントを追加しようとしましたが、これを行うには編集が唯一の方法だと思います...

皆様へ:素晴らしいフィードバックに感謝します。私はまっすぐなPMから少し外れたことをしています。すべてのビューにはviewControllerがあります(私がそれらを呼んでいます)。デリゲート/データプロバイダーの私自身のハイブリッドです。しかし、これは議論の余地があります。痛みである状態を処理するとき、それはフレックスコンポーネントのライフサイクルです。状態を変更した場合..「この状態のすべてのコンポーネントの準備ができました」というイベントはありません。「状態を変えた」と言う唯一のイベント。そのため、状態の変化で起動する私のコードは、まだ準備ができていないコンポーネントと通信しようとしています。したがって、私が見たところ、状態内のすべてのコンポーネントでcreationCompleteを使用して登録する準備ができていない限り、すべてのコンポーネントが状態内で作成されることを保証するデザインパターンや完璧な方法はないようです...そうでない場合は、競合状態になります。フレームワークやデザインパターンに関係なく、

textareaは簡単なPM修正です。pm値にバインドするだけです。しかし、私ができない時もあります。

具体的には、その状態になったら、ビデオをディスプレイに添付しようとしています。これは、addchildを介して行われます。どこで行うかに関係なく、addchildを呼び出す前に、videoDisplayの読み込みが完了していることを知っておく必要があります。ドキュメントには最後に起動すると書かれているので、currentStateChangeイベントを試しましたが、残念ながら、状態のコンポーネントはまだ初期化中です。したがって、creationCompleteが私の唯一のオプションのようです。たぶん、コードをクリーンに保つ唯一の正しい方法は、状態に入ったときと同じように使用して全体(ビデオディスプレイとビデオ)を作成することです。私は、フレックスフレームワークに、すべてをその場で構築するのではなく、ここで私を驚かせるイベントがあることを望んでいました。

4

1 に答える 1

0

PMにはビジュアルコンポーネント(myTextArea)への参照があるため、これは完全に純粋な形式のプレゼンテーションモデルではありません。それは、より監督的なプレゼンター/コントローラータイプのセットアップのようです。

そうは言っても、私があなたの問題を解決する方法は、完全なプレゼンターを完全に使用する(ビューの知識がまったくない)か、完全なコントローラーを使用する(ビューはコントローラーが通信するためのインターフェースを実装する)ことです。Flexでプレゼンターを使用する利点は、テキストやselectedItemなどのバインド可能な値を作成でき、ビューがオンラインになるたびにその変数にバインドされるため、Flexコンポーネントのライフサイクルに関する問題が解消されることです。

于 2011-07-13T13:08:35.960 に答える