0

我有一个小部件,我在 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);
4

1 回答 1

2
FieldUpdater method is called when updating values in the column.

要捕获点击事件,如果我没记错,那么 MyItemCell 是您的自定义单元格。所以在那个单元内实现onBrowserEvent事件并在那里处理点击事件。

 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());
            }

        }
于 2013-05-30T05:31:28.063 回答