以下のrender関数を介して、AbstractCellを拡張するGWTセルでレンダリングするウィジェットがあります。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);