2012-08-02 37 views
1

我正在嘗試使用GWT 2.5rc1自定義tablebuilder爲我的datagrid中的每一行呈現一個子表。我遵循2.5 rc1展示中的示例(網址:http://showcase2.jlabanca-testing.appspot.com/#!CwCustomDataGrid)。 我能夠看到新添加的子行,但問題出現在我想將點擊處理程序添加到子元素錨點元素中時.. Clickhandler從不被調用,這對我來說似乎也很清楚,因爲我是不在任何地方「註冊」事件處理程序。如何使用自定義表生成器渲染具有clickhandler GWT的GWT小部件?

在這裏,我現在使用的代碼,「相關部分」:

private void buildRegRow(Registrazione rowValue,final int absRowIndex, boolean isCommentRow) { 
     // Calculate the row styles. 
     SelectionModel<? super Registrazione> selectionModel = cellTable.getSelectionModel(); 
     boolean isSelected = 
       (selectionModel == null || rowValue == null) ? false : selectionModel 
         .isSelected(rowValue); 
     boolean isEven = absRowIndex % 2 == 0; 
     StringBuilder trClasses = new StringBuilder(rowStyle); 
     if (isSelected) { 
      trClasses.append(selectedRowStyle); 
     } 

     // Calculate the cell styles. 
     String cellStyles = cellStyle; 
     if (isSelected) { 
      cellStyles += selectedCellStyle; 
     } 

     if(isCommentRow) 
      cellStyles += childCell; 

     TableRowBuilder row = startRow(); 
     row.className(trClasses.toString()); 

     /* 
     * Checkbox column. 
     * 
     * This table will uses a checkbox column for selection. Alternatively, 
     * you can call dataGrid.setSelectionEnabled(true) to enable mouse 
     * selection. 
     */ 
     TableCellBuilder td = row.startTD(); 
     td.className(cellStyles); 
     td.style().outlineStyle(OutlineStyle.NONE).endStyle(); 
     if (!isCommentRow) { 
      renderCell(td, createContext(0), cellTable.getColumn(0), rowValue); 
     } 
     td.endTD(); 

     /* 
     * View children column. 
     * 
     * Displays a link to "show children". When clicked, the list of friends is 
     * displayed below the contact. 
     */ 
     td = row.startTD(); 
     td.className(cellStyles); 
     if(!isCommentRow) { 
      td.style().outlineStyle(OutlineStyle.NONE).endStyle(); 
      if(rowValue.hasComments()) 
       //td.className(CellTableResource.INSTANCE.dataGridStyle().showChildren()); 
       renderCell(td, createContext(1), cellTable.getColumn(1), rowValue); 
     } else { 
      td.colSpan(getColumns().size() - 1); 

//    // Draw sub-table header 
      TableBuilder subTable = td.startTable(); 
      TableSectionBuilder subTableSection = subTable.startTHead(); 
      TableRowBuilder tr2 = subTableSection.startTR(); 
      TableCellBuilder td2 = tr2.startTH(); 
      td2.text(msgs.date()); 
      tr2.endTH(); 
      td2 = tr2.startTH(); 
      td2.text(msgs.username()); 
      tr2.endTH(); 
      td2 = tr2.startTH(); 
      td2.text(msgs.comment()); 
      tr2.endTH(); 
      td2 = tr2.startTH(); 
      td2.text(msgs.actions()); 
      tr2.endTH(); 

      subTableSection.endTR(); 
      subTable.endTHead(); 
      subTableSection = subTable.startTBody(); 
      for(final EntityComment ec : rowValue.getCommentList()) { 
       tr2 = subTableSection.startTR(); 

       // Date 
       td2 = tr2.startTD(); 
       td2.text(DateUtil.getDefaultDateTimeFormat().format(ec.getCreationDate())); 
       tr2.endTD(); 

       // Username 
       td2 = tr2.startTD(); 
       td2.text(ec.getUsername()); 
       tr2.endTD(); 

       // Text 
       td2 = tr2.startTD(); 
       td2.text(ec.getText()); 
       tr2.endTD(); 

       // Actions 
       td2 = tr2.startTD(); 

        // Remove 
       Anchor removeAnchor = new Anchor("remove"); 
       removeAnchor.addClickHandler(new ClickHandler() { 

        @Override 
        public void onClick(ClickEvent event) { 
         Window.alert("clicked"); 
        } 
       }); 
       td2.html(new SafeHtmlBuilder().appendHtmlConstant(removeAnchor.toString()).toSafeHtml()); 
       tr2.endTD(); 

       subTableSection.endTR(); 
      } 
      subTable.endTBody(); 
      td.endTable(); 
     } 
     td.endTD(); 

     for(int i = 2; i <= 6; i++) { 
      // Recorded, list name, callcenter, msisdn 
      td = row.startTD(); 
      td.className(cellStyles); 
      td.style().outlineStyle(OutlineStyle.NONE).endStyle(); 
      if(!isCommentRow) { 
       renderCell(td, createContext(i), cellTable.getColumn(i), rowValue); 
      } 
      td.endTD(); 
     } 


     row.endTR(); 
    } 

子表顯示出來,在正確的位置錨,但對clickHandler永遠不會調用。我不知道如何將處理程序代碼寫入頁面,就像我已經完成渲染錨點一樣。

感謝您的任何幫助。

回答

0

我試過自定義tablebuilder並創建了一個網格。您可以使用適當的結構添加任何元素。確保您爲每個創建的元素設置了唯一ID。然後通過代碼訪問通過下面的代碼元素,

Element e = DOM.getElementById(id); 

鑄元到適當的部件即,如果您使用的是你可以隨時將它轉換爲文本框的文本輸入元素。要投射元素,還有一個步驟可以讓您進行Google搜索。然後添加點擊處理程序或您想要的處理程序。