2011-10-23 11 views
2

テキストセルからonclickイベントをキャプチャしようとしています。なぜクリックイベントが発生しないのですか? -GWT-Textcellがonclickイベントを発生しない

 TextCell tempCell = new TextCell() { 
      @Override 
      public void onBrowserEvent(Cell.Context context, Element parent, String value, 
        NativeEvent event, ValueUpdater<String> valueUpdater) { 
       if ("click".equals(event.getType())) { 
        Window.alert("Clicked me from cell"); 
       } 
      } 
     }; 
     Column<Contact, String> tempColumn = new Column<Contact, String>(tempCell) { 
      @Override 
      public String getValue(Contact object) { 
      return object.address; 
      } 


     }; 
     table.addColumn(tempColumn, "Address"); 

答えて

0

TextCellはイベントを消費しないため、これは機能しません。代わりに、AbstractSafeHtmlCellをサブクラス化して、どのイベントをコンストラクタに渡して消費するかを指定する必要があります。

これが行います。

private class MyTextCell extends AbstractSafeHtmlCell<String> { 

/** 
    * Constructs a TextCell that uses a {@link SimpleSafeHtmlRenderer} to render 
    * its text. 
    */ 
    public MyTextCell() { 
    super(SimpleSafeHtmlRenderer.getInstance(), "click"); 

    } 



    @Override 
    public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) { 
    if (value != null) { 
     sb.append(value); 
    } 
    } 

    @Override 
    public void onBrowserEvent(Context context, Element parent, 
     String value, NativeEvent event, 
     ValueUpdater<String> valueUpdater) { 
    GWT.log("Click event!!!!!! Not listening to anything else"); 
    } 
} 
+0

おかげで..私種類の同じような方法で自分のコードを書いた – ravi

1

GWTイベントは、Event.ONCLICKのようにenumであると思います。

解決するには、Event.ONCLICK.toString()を直接使用して、イベントが発生するかどうかを確認してください。

一般に、イベントの名前が「クリック」であると仮定すると、何か変更があった場合にアプリケーションが機能しなくなる可能性があるため、コードに緩い文字列を持たないことを覚えておいてください。

関連する問題