2

gwtを使い始めたばかりなので、質問が単純すぎる場合はご容赦ください。

多数のDataGrid、ボタンなどを含むgwt module(たとえば)を作成します。これはWebページで正常に機能します。Editor_A

次に、2番目のgwtモジュールを作成しようとしていますEditor_B

それらは同じページに表示されることはありませんが、追加のテーブルとボタンがあるだけなので、Editor_Bと非常によく似ています。Editor_A

もちろん、からにコードをコピーして貼り付けたくありません。代わりに、Editor_Aのコードを再利用したいと思います。Editor_AEditor_B

どうやってやるの?

Editor_Aから継承し、Editor_Bを生成するためにいくつかの変更を加えて、そのコードのほとんどを再利用するにはどうすればよいですか?

4

2 に答える 2

3

これにより、問題を解決できます。ベースのカスタムウィジェット、クライアント側ユーティリティなどを担当する追加のコアモジュールを作成できます。次に、両方のモジュールでコアモジュールを継承する必要があります。したがって、あなたの場合、によって使用される複合ウィジェットを作成できますEditor_A。その後、後者のモジュールでは、Editor_Bから継承してを作成できますEditor_A。そしてもちろん、クラスからそれにいくつかの変更を加えることができますEditor_B

同じモジュールでそれらを使用している場合は、あなたの場合はEditor_Aである1つのBaseEditorを作成できます。その後:

public class Editor_B extends Editor_A{
    public Editor_B(){
      draw();
    }

    private void draw(){
   // here, add your extra table and button, to panel which're protected(public)
    }
}

Javaの継承とは別に、GWTモジュールを適切な方法で構成するようにしてください。そうしないと、GWTJavaからJavascriptへのコンパイラーが関連するクラスを見つけることができません。これを行うには、モジュールのXML構成を次のように変更します。

<module>
   <inherits name='com.google.gwt.user.User'/>
   <source path="widgets"/>
</module>
于 2012-10-10T15:41:21.730 に答える
2

最善のアプローチは、同じモジュールまたは異なるモジュールで簡単に再利用できるカスタムウィジェットを作成することです。次に、次のいずれかを実行できます。

(a)子ウィジェットや新しい機能を追加してカスタムウィジェットを拡張する(MyBigPanelはMySmallPanelを拡張する)、または

(b)同じ複合ウィジェットに子を追加するだけです(子を取得できる場合、つまり、カスタムウィジェットのコンテナーとしてLayoutPanel、FlowPanel、HtmlPanelなどを使用した場合)。次に、mySmallPanel.add(anotherButton)を呼び出すだけです。

補足:これらのウィジェットは同じページで使用されないということです。異なるモジュールに存在する必要があるという意味ではありません。同じモジュール内の異なるビューで使用できます。たとえば、モジュールは、ユーザーが異なる個別のアプリと考えてください。この場合、すべてのウィジェットを別のモジュールに抽象化する(そして他のモジュールに継承する)か、別のjarに配置することができます。

于 2012-10-10T18:20:48.373 に答える