3

GWT の Editor フレームワークは非常に便利で、POJOの編集だけでなく、読み取り専用表示にも使用できます。

ただし、インライン編集を行うためのベスト プラクティスが何であるかは完全にはわかりません。

を持っていて、を表示および編集するためのペアPersonProxyが 1 つあるとします。この Presenter-View は、デフォルトで を読み取り専用モードで表示し、ユーザーが編集ボタンを押すと、ユーザーがオブジェクトを編集できるようにする必要があります。 Presenter-ViewPersonProxyPersonProxyPersonProxy

私が思いついた解決策はPersonEditEditor、. にはが含まれ 、 には normal が含まれます。 最初は を表示して非表示にします。PersonDisplayEditorUiBinderViewPersonEditEditorValueBoxEditorDecoratorPersonDisplayEditorLabels
PersonDisplayEditorPersonEditEditor

では、エディタごとViewに 2 つ作成し、インターフェイス経由でからアクセスできるようにします。 また、インターフェイスでメソッドを定義します。 RequestFactoryEditorDriverPresenterViewsetState()View

初めて が表示されたときは、とPresenterを呼び出します。 PersonDisplayDriver.display()setState(DISPLAYING)

ユーザーが[編集] ボタンをクリックするPersonEditDriver.edit()setState(EDITING)Presenter.
setState(EDITING)を隠してPersonDisplayEditor見えるようにしPersonEditEditorます。

これが最善のアプローチであるかどうかはわかりません。そうでない場合、インライン編集を行うための推奨されるアプローチは何ですか? エディタで単体テストを行う最良の方法は何ですか?

4

2 に答える 2

2

2つの異なるビューを開発する余裕がある場合は、それを使用すると、最も柔軟性が高くなります。

2つのビューを開発して維持するコストを支払う余裕がなかったアプリで行ったことは、2つの状態をエディターに焼き付けることでした。たとえば、ラベルまたはテキストボックスのいずれかであるカスタムコンポーネント(ほとんどの場合)場合によっては、テキストボックスを読み取り専用に設定し、スタイルを適用してボックスの境界線を非表示にします)。
現在使用しているモードを検出するために、RequestFactoryEditorDriver(あなたと同じように)使用しているため、エディターに実装させます。ここHasRequestContextで値を受け取るnullと、ドライバーのdisplay()メソッドが使用されたことを意味するため、読み取り専用モードになります。EditorVisitor別の方法は、いくつかのインターフェースと一緒に使用することHasReadOnlyです(ところで、これはまさに編集者RequestFactoryEditorDriverRequestContext受け継がれるものです)。HasRequestContext

于 2012-06-26T09:45:07.033 に答える
2

はい、Presenter-View ペアである必要があります。ただし、この機能を実現するには、次の 2 つの方法があります。

1) 編集/表示コードの設計を 1 つのui.xml に統合します。つまり、EDitHorizo​​natlPanelの編集コードとViewHorizo ​​ntalPanelの表示コードを統合します。パネルの ID が異なります。idを使用して、displayメソッドでパネルを表示/非表示します。場合はViewHorizo​​ntalPanelを表示し、場合は EditHorizo ​​ntalPanelを表示します。getView().setState() ==DisplayinggetView().setState()==Editing

2) ラベルを使用する代わりに、テキスト ボックスのみを使用します。表示モードで必要な場合は Enable プロパティを false に設定し、それ以外の場合は true

プレゼンター/ビューを 2 つ作成しましたが、編集/ビュー機能に同様のコードがあれば、ビュー用に同様のコードを何度も書き直す必要はないと思います。

大きなプロジェクトに非常に多くの編集/表示機能があり、そのようなタイプの複数のビュー/プレゼンターを作成すると、プロジェクトのサイズが非常に大きくなり、不要になります。

私が提案したことは、良いアプローチではないかもしれませんが、コードの複製を避けるのに役立つ方法を見つけるべきだと思います.

于 2012-06-26T08:36:10.230 に答える