我有一个小部件,我在 GWT 单元中渲染,它通过下面的渲染函数扩展了 AbstractCell。该列的创建如下所示,其中定义了 getValue 和 FieldUpdater(更新)函数。目的是将所选行设置为与单击的小部件相对应。但是,当我单击小部件时,不会调用单元格的 onBrowserEvent 函数。我认为这是因为有问题的小部件在其中包含一个 FlexTable。
我通过在函数 AbstractCellTable.onBrowserEvent2 中设置断点来验证这一点,并注意到该函数不会触发单元格事件,因为 else if (section == getTableBodyElement())
返回假。这是错误的,因为该部分是表格主体元素的子部分,对应于我通过小部件插入的表格。
有没有办法将内部表格(小部件)中的点击传递给外部单元格表格?
//Render function to add widget to cell
public void render(Context context, MyItem value, SafeHtmlBuilder sb) {
if (value != null) {
SafeHtml safeValue = SafeHtmlUtils.fromTrustedString(value
.getWidget().getElement().getString());
sb.append(safeValue);
}
}
//Creating the corresponding column, setting up the field update,
// and adding the column to cell table
// Create Cell
MyItemCell myItemCell = new MyItemCell();
// Create Column
Column<MyItem, MyItem> myItemColumn = new Column<MyItem, MyItem>(myItemCell) {
@Override
public MyItem getValue(MyItem object) {
return object;
}
};
// add field updater
myItemColumn.setFieldUpdater(new FieldUpdater<MyItem, MyItem>() {
@Override
public void update(int index, MyItem object, MyItem value) {
// This function, for some reason,
// is not getting called when I click
// on the widget corresponding to MyItem
MyDataTable.this.getSelectionModel().setSelected(object, true);
}
});
// Add column to table
this.getDataTable().addColumn(myItemColumn);