GWT:将单元格中包含的窗口小部件中的单击事件传递给列

时间:2013-05-30 00:58:39

标签: gwt gwt-celltable

我有一个我在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);

1 个答案:

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

        }