2

私の GWTQuery プロジェクトには、4 つのカスタム ドロップダウン メニューがある状況があります。ユーザーが現在のメニュー選択のいずれかを変更すると、4 つのメニューの値 (そのうちの 1 つはそのメニューの新しく変更された値) を使用して AJAX 要求が行われます。4 つのメニューすべてが同様のリクエストをトリガーするため、AJAX リクエストを処理する共通のクラスを作成し、クリックハンドラがそのクラスを拡張できるようにします。

しかし、メニューは動的に生成されるため、GWTQuery のliveメソッドに頼らざるを得ません。そして、それはタイプの変数をFunctionパラメーターとして取ります。既に Function を拡張しているため、Ajax ハンドラー クラスも拡張することはできません。では、どうすればいいですか?このようなものは、私が探しているものです:

class f extends Funnction, AJAX_Handler {
 public boolean f(Event e) {
  ...
  return true;
  }
 public void request(int i1,int i2,int i3,int i4) {
  //for handling the request, defined in the AJAX_Handler class
  ...
  }
 }

1 つには、AJAX_handler 関数を含む 4 つのメニューすべての汎用ハンドラーを定義してから、どのメニューが現在のハンドラーを参照しているかを検出することはできません。AJAX_handler クラスは別のものでなければなりません。

4

1 に答える 1

1

代わりにインターフェースを定義してください。

 public interface AJAX_Handler
 {
    public void request(int i1,int i2,int i3,int i4);

 }

次に、実際のクラスで、定義されたインターフェイスを実装します。

 class f extends Funnction implements AJAX_Handler
 {
   public boolean f(Event e) {
      ...
    return true;
    }
   public void request(int i1,int i2,int i3,int i4) {
   //for handling the request, defined in the AJAX_Handler class
    ...
    }
  }

[編集] 機能を同じ場所に保持する必要がある場合。最も簡単な修正は、 AJAX_Handler インターフェイスを定義してからクラスを実装することだと思います。例えば:

 public class AJAX_HandlerImpl implements AJAX_Handler
 {
    public void request(int i1,int i2,int i3,int i4){
         //do whats necessary
     }
 }

次に、f クラスでコンポジションを使用します。何かのようなもの:

 class f extends Funnction implements AJAX_Handler
 {
   private AJAX_HandlerImpl impl = new AJAX_HandlerImpl();

   public boolean f(Event e) {
      ...
    return true;
    }

   public void request(int i1,int i2,int i3,int i4) {
          impl.request(i1,i2,i3,i4);
    }
  }
于 2013-01-22T19:48:28.573 に答える