Как добавить обработчик кликов в подстроку celltablebuilder

Я могу создавать пользовательские строки с помощью celltablebuilder. Щелкнув по определенной ячейке привязки, я могу создать дополнительные подстроки для этой строки. В этой подстроке есть кнопки, при нажатии на кнопку я выполняю какое-то действие. Я могу добавить кнопки с обработчиком кликов в подстроку, но при нажатии на кнопку ничего не происходит, обработчик кликов не срабатывает.

Кто-нибудь может помочь.

protected void buildRowImpl(GridDTO rowValue, int absRowIndex ) {
  buildRows(rowValue, absRowIndex, true);
  if (showingFriends.contains(rowValue.getComponentId())) {
     buildAdditonalRows( absRowIndex, gridDTO);
  }

}
private void buildAdditonalRows(int index, GridDTO rowValue, ){ 
     TableRowBuilder row = startRow();
     td = row.startTD();
     if(rowValue.getXpath() != null){
    //td.text(rowValue.getXpath());
    renderCell(td, createContext(1), cellTable.getColumn(1), rowValue);
 }else{
    td.text("");
 }
     td.endTD();
     td = row.startTD();
     Button button = new Button ();
 button.setText("Save");
 button.addClickHandler(new ClickHandler() {
 @Override
 public void onClick(ClickEvent event) {
     Window.alert("ssss");
     }
 });
 DivBuilder div = td.startDiv();
 div.html(new afeHtmlBuilder().appendHtmlConstant(button.toString()).toSafeHtml());
 div.end();
     td.endTD();
     row.endTR();
}

person Saritha    schedule 26.09.2012    source источник
comment
У меня аналогичная проблема, но я не могу создавать подстроки. Не могли бы вы показать код строк сборки?   -  person Nuno Gonçalves    schedule 28.09.2012
comment
Я ответил на подобный вопрос здесь: stackoverflow.com/questions/8642622/   -  person mkb    schedule 14.02.2013


Ответы (2)


CellPreviewEvent предоставляет субиндекс. Вы можете использовать его для получения значения подстроки. Пример использования:

dataGrid.addCellPreviewHandler(new CellPreviewEvent.Handler<TreeItem>() {
    @Override
    public void onCellPreview(final CellPreviewEvent<TreeItem> event) {
        if(event.getNativeEvent().getType().equals(BrowserEvents.CLICK)){
             if(event.getContext().getSubIndex()>0){
                    event.getValue().getChild(event.getContext().getSubIndex()-1);
             }
        }
    }
});

Или вы можете предоставить пользовательскую реализацию CellPreviewEvent.Handler с selectionMode. Дополнительные сведения см. на странице AbstractHasData

person Tomas Tamošaitis    schedule 16.01.2015

У меня была аналогичная ситуация, когда мне нужен был виджет внутри ячейки для прослушивания событий щелчка... Я обнаружил, что виджет не реагирует на события после того, как вы вставили его в ячейку (другими словами, только фактическое HTML, который составляет виджет, помещается в ячейку, любая обработка событий не включена). Обходной путь заключается в добавлении событий в ячейку (вы можете создать собственный класс ячейки для этого конкретного виджета ячейки и переопределить OnBrowserEvent для прослушивания событий).

См. GWT: при добавлении пользовательских widget to celltable с потерей событий пользовательских виджетов для более красноречивого объяснения и примера кода.

person user1021138    schedule 28.09.2012