代码之家  ›  专栏  ›  技术社区  ›  Tim

GWT:点击CellTable单元格中的SafeHTML会有什么反应?

  •  0
  • Tim  · 技术社区  · 10 年前

    我使用CellTable来显示查询结果,我需要将这些结果显示为(html)链接。我想对点击这些链接做出反应。到目前为止,我是这样实现的:

        // ClickHandler on CellTable
    cellTable.addCellPreviewHandler(new Handler<OperationalItemMultipleSearchRowData>() {
        @Override
        public void onCellPreview(CellPreviewEvent<OperationalItemMultipleSearchRowData> event) {
            boolean isClick = "click".equals(event.getNativeEvent().getType());
            if (isClick) 
                AdminUtils.EVENT_BUS.fireEvent(new SimpleSearchEvent(event.getValue().getName()));              
        }
    });
    

    问题是,这会对整个行而不是链接上的单击做出反应。由于体系结构的限制,链接本身并不是一个真正的html链接,而是一个毫无意义的SafeHtml链接。我只需要看看&链接的感觉:

    Column<OperationalItemMultipleSearchRowData, SafeHtml> nameColumn = new Column<OperationalItemMultipleSearchRowData, SafeHtml>(new SafeHtmlCell()) {
    
                @Override
                public SafeHtml getValue(final OperationalItemMultipleSearchRowData object) {
                    return new SafeHtml() {
    
                        @Override
                        public String asString() {
                            return "<a href=\"javascript:;\">" + object.getName() + "</a>";
                        }               
                    };
                }
            };
    

    我如何才能对单击此链接做出反应?(而不是整行) 有没有更优雅的方法来实现这一点?

    干杯

    1 回复  |  直到 10 年前
        1
  •  1
  •   Thomas Broyer    10 年前

    与任何其他用途一样 活动委托 ,基本思想是从事件的目标开始在层次结构中查找,直到找到要查找的链接元素,或其他表示搜索已结束且单击指向链接外部的元素(例如,您到达了单元格、行或表)。

    也就是说,我认为你应该将你的行为合并到一个特定的 Cell 而不是使用 CellPreviewHandler (复制/粘贴 ActionCell TextButtonCell 作为起点)。

    作为补充,我也认为你应该 当您实际上没有链接到任何地方时,请使用链接,或者如果行为是链接的行为,请尝试为链接提供目标(这样,右键单击、中键单击或ctrl单击将仅起作用)。如果您想要链接的外观(没有“感觉”),那么只需使用 操作单元格 文本按钮单元格 并相应地设置样式。