2013-05-30 43 views
0

我有一個小部件,我通過下面的渲染函數呈現在GWT單元格中,該單元格擴展了AbstractCell。該列的創建如下,定義了getValue和FieldUpdater(update)函數。目的是將選定的行設置爲與點擊的小部件相對應。但是,當我單擊該小部件時,單元格的onBrowserEvent函數不會被調用。我認爲這是因爲這個小部件中包含一個FlexTable。GWT:將包含在單元格中的小部件的點擊事件傳遞到列

我通過設置功能AbstractCellTable.onBrowserEvent2斷點驗證了這一點,並注意到該函數不因爲別的 如果(部分== 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); 

回答

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

     } 
+0

+1。這應該工作。 –

+0

謝謝。在我的調試器中,當我單擊在單元格中呈現的窗口部件時,我看不到爲MyItemCell調用onBrowserEvent函數。當我點擊窗口部件(但在單元格中)時,我確實在onBrowserEvent函數中找到了斷點。有小費嗎? – AshD

+0

請注意,我在MyItemCell的構造函數中使用以下參數調用AbstractCell父構造函數:super(click,「keydown」,「change」) – AshD

相關問題