1

GWT の cellTable の列に clickHandler を追加する方法はありますか??

TextColumn のドキュメントにはオプションがありません。

私の要件はこのようになります-セルテーブルに5列のデータを表示する必要があり、列の1つにonClickイベントが発生する必要があります。しかし、textColumn にクリックハンドラを追加する方法が見つかりませんでした。

これが通常のhtmlで行われることになっていた場合、コードを書くのに5秒もかかりません-

4

1 に答える 1

0

カスタム セルを記述します (ここでは、GWT に基づいて記述した例を示しますActionCell)。

public abstract class ActionTextCell<C> extends AbstractCell<C> {

  public static interface Delegate<T> {
    void execute(T object);
  }

  private final Delegate<C> delegate;

  public ActionTextCell(Delegate<C> delegate) {
    super("click", "keydown");
    this.delegate = delegate;
  }

  @Override
  protected void onEnterKeyDown(Context context, Element parent, C value, NativeEvent event,
      ValueUpdater<C> valueUpdater) {
    delegate.execute(value);
  }

  @Override
  public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) {
    super.onBrowserEvent(context, parent, value, event, valueUpdater);
    if ("click".equals(event.getType())) {
      onEnterKeyDown(context, parent, value, event, valueUpdater);
    }
  }

  @Override
  public void render(Context context, C value, SafeHtmlBuilder sb) {
    sb.append(new SafeHtmlBuilder().appendHtmlConstant("<span>" + render(value) + "</span>")
      .toSafeHtml());
  }

  public abstract String render(C value);

}

そして、IndentityColumnあなたがあなたに追加する内でそれを使用してくださいCellTable

final ActionTextCell<MyClass> cell = new ActionTextCell<MyClass>(new ActionTextCell.Delegate<MyClass>() {

      @Override
      public void execute(MyClass c) {
        // do something with c
      }
    }) {

      @Override
      public String render(MyClass c) {
        // return a string representation of c
      }
    };

final IdentityColumn<MyClass> column = new IdentityColumn<MyClass>(cell);
于 2011-10-25T08:01:34.633 に答える