1

我正在尝试使用 GWT 2.5rc1 自定义表格构建器为我的数据网格中的每一行呈现一个子表。我遵循了 2.5 rc1 展示中的示例(网址:http ://showcase2.jlabanca-testing.appspot.com/#!CwCustomDataGrid )。我能够看到新添加的子行,但是当我想向子行锚元素添加点击处理程序时问题就来了。点击处理程序从未被调用,这对我来说似乎也很清楚,因为我不是在任何地方“注册”事件处理程序。

这里是我现在使用的代码,“相关部分”:

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

子表出现了,锚点在正确的位置,但点击处理程序从未被调用。我不知道如何将处理程序代码写入页面,就像我为渲染锚所做的那样。

谢谢你的帮助。

4

1 回答 1

0

我已经尝试过自定义表格生成器并创建了一个网格。您可以使用适当的结构添加任何元素。确保为您创建的每个元素设置唯一 ID。然后通过代码通过以下代码访问元素,

Element e = DOM.getElementById( id );

将元素转换为适当的小部件,即,如果您使用的是文本输入元素,则始终可以将其转换为文本框。要投射元素,还有一个步骤,您可以用谷歌搜索。然后添加 clickhandler 或您想要的任何处理程序。

于 2012-11-27T04:44:32.697 回答