2011-01-29 22 views
18

我使用CellTable顯示我的記錄,但現在的事情是我想顯示一個選擇框,當用戶點擊一個單元格。還有一件事是,選擇框是我自己的小部件,而不是預定義的。你能向我建議任何這樣做的方法嗎?如何將小部件放入CellTable單元格中?

+0

請或不使用簽名或標語]在您的文章(http://stackoverflow.com/faq#signatures)。 – meagar 2011-01-29 07:06:44

+0

我有同樣的問題 - 我需要渲染一些相當重量級的小部件(按其邏輯)放入表中的單元格中。我想從CellTable中獲得的東西是能夠提供一個IsWidget工廠,用於生成用於呈現列中每個單元格的小部件。我看不到一個簡單的方法來做到這一點,但我寧願不從頭開始實施表格。 – drdozer 2012-07-17 15:38:38

回答

23

在GWT的google小組上有一篇文章討論了the answer。基本上,您可以像平常一樣創建自定義小部件,並且在render函數中使用widget.getElement()。getInnterHTML()。

@Override 
public void render(com.google.gwt.cell.client.Cell.Context context, 
      String value, SafeHtmlBuilder sb) { 
     if (value != null) { 
      MyWidget widget = new MyWidget(value); 
      sb.appendEscaped(widget.getElement.getInnerHTML()); 
     } 
} 
+4

我沒有使用widget.getElement.getInnerHTML(),而是使用了widget.getElement.getString(),因爲它包含了外部HTML。 – 2011-07-12 11:52:30

+1

是否有可能重用相同的小部件來呈現每個單元格的HTML? (我應該只是寫一些代碼來找出..但只是感興趣..) – HaveAGuess 2011-11-01 13:29:18

2

前段時間我面臨類似的問題(試圖插入一個自定義小部件到CellList單元格),但不幸的是沒有找到一個簡單的解決方案。

通常,您可以實現特定的單元類,擴展AbstractCellActionCell。在這種情況下,你將不得不重寫render()方法並實現你自己的渲染。在AbstractCell class javadoc中給出了很好的例子。

8

這是一種反模式。單元格的全部目的是讓你沒有小部件:你應該直接在單元格中「呈現」html。

7

在GWT的google小組上有一篇文章討論了答案。基本上,您可以像平常一樣創建自定義小部件,並且在render函數中使用widget.getElement()。getInnterHTML()。

@Override 
public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) { 
    if (value != null) { 
     MyWidget widget = new MyWidget(value); 
     sb.appendEscaped(widget.getElement.getInnerHTML()); 
    } 
} 

它的工作原理,但有一個限制:

  • CAN NOT直接連接任何處理程序在你的小部件(外側或內側)。

如:

widget.addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     // Won't work!!! 
    } 
}); 

或:

widget.getMyTextBox().addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     // Won't work!!! 
    } 
}); 
相關問題