GWT - обработчик кликов для TextColumn в cellTable - PullRequest
1 голос
/ 23 октября 2011

Есть ли способ добавить clickHandler для столбца в cellTable в GWT ??

Я не вижу никакой опции из документации для TextColumn.

Мое требование идет следующим образом - мне нужно отобразить 5 столбцов данных в таблице ячеек, и один из столбцов должен иметьСобытие onClick для запуска.Но я не нашел способа добавить обработчик кликов к textColumn.

, если бы это должно было быть сделано в обычном html, мне не потребовалось бы 5 секунд, чтобы написать код -

1 Ответ

0 голосов
/ 25 октября 2011

Напишите свою собственную ячейку (вот пример, который я написал на основе 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);
...