私は開いているTitleWindowを持っているので、6つの状態が定義されています。私はすべての私の意見にPresentationモデルのパターンを使用しています。私は不満足なニュアンスを発見しました。私がウィンドウにXXX状態になるように指示すると、フレックスの状態が遅延ロードを使用するため、コントロールを初期化する必要があります。だから...私のPMコードは、myTextArea.textが爆発し、「アクセスできない」と言っています。回避策として、コントロールをPMでコントロールを登録するためにいくつかのcreationCompleteイベントを作成しました。したがって、状態が変わると、textareaは最終的に初期化され、creationCompleteはその参照を設定するPM.registerTextArea()を呼び出します。その関数で私は私のコードを実行します... myTextArea.text ..フレックスCairngorm 3プレゼンテーションモデルの初期化
これは私がそれを嫌うような醜いハックのように思えます。作成された状態全体がPMにコールされるまで待つ方法はありますか?私はenterstateを試みた...しかし、このイベントは、状態コントロールが準備が整う前に発火するようだ。
みんなに...
を私がコメントを追加しようとしましたが、私は編集は私がこれを行うことができる唯一の方法だと思います:偉大なフィードバックに感謝を。私はちょっとしたストレートPMをやっています。すべてのビューにはviewControllerがあります(私が呼び出すとき)。それはちょっとした代理人/データ提供者の自分のハイブリッド。しかし、これは疑問です。これは、痛みである状態を扱う際のフレックスコンポーネントのライフサイクルです。状態を変更した場合、「この状態のすべてのコンポーネントが準備完了です」と言うイベントはありません。 「私たちは州を変えました」と言っています。状態の変化で発生する私のコードは、まだ準備ができていないコンポーネントと対話しようとしています。ですから、私が見るところでは、状態のすべてのコンポーネントでcreationCompleteを使用して登録する準備ができていない限り、すべてのコンポーネントが確実に状態になるように設計パターンや完璧な方法がないようです競争状態になる。フレームワークやデザインパターンにかかわらず、これは根本的な問題であるようです。
テキストエリアは簡単なPM修正です。pm値にバインドするだけです。しかし、私はできない別の時があります。
具体的には、私がその状態になると、ディスプレイにビデオを添付しようとしています。これはaddchildを介して行われます。どこに行っても、私はaddchildを呼び出す前にvideoDisplayがロードされていることを知る必要があります。私は、docsが最後に発生すると言うので、currentStateChangeイベントを試みました...しかし、悲しいかな、状態のコンポーネントはまだ初期化中です。ですから、creationCompleteは私の唯一の選択肢です。たぶん、クリーンなコードを守る唯一の純粋な方法は、状態が入力されると、物事(ビデオ表示とビデオ)全体を作成することです。私はフレックスフレームワークが、その場ですべてのものをbuiildingするのではなく、ここに私をehlpするイベントを持っていることを望んでいました。
ちょっと汚れているので気に入らないかもしれませんが、テキストクラスに表示する値を保持するために、ビュークラス内にパブリックのバインド可能な変数を作成するとどうなりますか?この方法で、コントローラからインターフェイスを介してプレゼンテーションにプッシュしますが、コントロールは実際に内部の「バッファ」を使用してコントロールが作成されてバインドされるまで値を保持します。 – shaunhusain
MVPを使用する動機は何か、私はそれを数回は理解しようとしましたが、実際に実装したことはありませんでした。なぜなら、おそらくテストが簡単で、それは余分な複雑さのためです。ただの好奇心から動機づけは何ですか? – shaunhusain
@shaunhusain:MVP!=プレゼンテーションモデル。 MVCよりもプレゼンテーションモデルが好きです。なぜなら、複雑さが低く、デカップリングが強く、テスト可能な方法でビューを偉大に抽象化するからです。 –