2011-04-11 15 views
1

他の開発者が作成したFlexコードをリファクタリングしています。私はActionScriptをMXMLから分離したいので、PresentationModelアプローチを実装しています。私が見つけた問題の1つは、元のActionScriptコードがMXMLから要素を追加/削除することです。プレゼンテーションモデルを使用してFlexに要素を追加する

ハンドラ関数がモデルをチェックし、値が正しい場合、ビューから要素を作成または削除します。プレゼンテーションモデルを広告要素に与えてビューに表示し、私が目指しているこの疎結合を維持する最良の方法は何ですか。

プレゼンテーションモデルが送出する単純なイベントを使用することを考えていましたが、追加する要素の詳細を渡すためのビューが表示されます。別の解決策がありますか?

おかげ

スティーブン

答えて

1

プレゼンテーションモデルを使用している場合は、私はあなたが起こるために必要なもののデータのいくつかの種類があると思います。並べ替えの項目が動的に追加/削除されているときは、操作が簡単になるようにデータ駆動型にしてください。別のアイテムを追加する場合は、選択したdataProvider(List、ComboBox、DataGroupなど)に別のデータモデルを追加します。

この方法を使用すると、ロジックがプレゼンターからビューに抽象化されます。イベントは、プレゼンターが何かを達成したときにあなたのビューが知る方法としてのみ使用する必要があります。データはこのように受け取ることができます(そうすることをお勧めします)。または、プレゼンター内のデータをdataProviderにバインドすることもできます。どちらも良いです、私はちょうどより清潔で簡単にバインディングを見つける。

+0

まあ、元のコードを参照してください)drawBorder(と呼ばれる別の関数を呼び出して、値を設定し、セッターの機能を持っています。このdrawBorder関数は、ボーダーシェイプを作成し、addElement()を使用してこれを追加します。 – StephenAdams

+0

はい、私はあなたがリファクタリングしていることを知っています。 Presenterパターンを使用するようにリファクタリングする場合は、いくつかの変更を行う必要があります。コーディングの仕方です。 –

0

プレゼンテーションモデルではなく、グラフィカルなもの(描画境界、設定スタイル、ドラッグ&ドロップ管理、アニメーションなど)を実行するコードのすべての部分がビューに含まれている必要があります。

この種のグラフィックは、PMでプロパティが変更された後に実行する必要があります.Cairngorm 3 Observer libを使用します。基本的には、プレゼンテーションモデルのいくつかの変更をリッスンし、ビューで関数を実行できるようにします。

<cg:ObserveValue 
    source="{ model.firstName }" value="{ Name.SARA }" 
    handler="runEffectFunction"/> 

私はここに既存のコードをリファクタリングしています覚えて、the documentation

+0

私はObserverライブラリを見てきましたが、私はデータバインディングをソリューションで考えていました。私はPresentationModelでshow/hideフラグを設定します。次に、これを追加しようとしている要素のvisibleプロパティにバインドします。この方法で、show/hideフラグを変更し、要素を追加するのではなく、要素のオン/オフを切り替えることができます。これは、このページが書き込まれた現在の方法では実行できません。 – StephenAdams

関連する問題