我有一个我在GWT单元格中渲染的小部件,它通过下面的渲染功能扩展了AbstractCell。该列创建如下,并定义了getValue和FieldUpdater(更新)函数。目的是将所选行设置为与所单击的窗口小部件相对应。但是,当我单击窗口小部件时,不会调用该单元格的onBrowserEvent函数。我认为这种情况正在发生,因为有问题的小部件包含一个FlexTable。
我通过在函数AbstractCellTable.onBrowserEvent2中设置断点来验证这一点,并注意到该函数不会触发单元格事件,因为 else if(section == getTableBodyElement())
返回false。这是假的,因为该部分是表体元素的子部分,对应于我通过窗口小部件插入的表。
有没有办法将内部表(窗口小部件)中的单击传递给外部单元格表?
//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);
答案 0 :(得分:2)
FieldUpdater method is called when updating values in the column.
要捕获点击事件,如果我没有错,那么MyItemCell就是您的自定义单元格。所以在那个单元格内部实现onBrowserEvent
事件并在那里处理click事件。
public void onBrowserEvent(final Event event) {
// TODO Auto-generated method stub
super.onBrowserEvent(event);
if (DOM.eventGetType(event) == Event.ONCLICK) {
System.out.println("event type -->> " + event.getType());
}
}