1

我有一个 CellTable,需要一个包含超链接的列和单元格内的 onclick 处理程序。第一个问题,如果我有什么做错了:

Column<MyObject, Anchor> linkColumn = new Column<MyObject, Anchor>(
    new AnchorCell()) {
    @Override
    public Anchor getValue(final obj) {
    Anchor link = new Anchor("link");
    link.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
        Window.alert("clicked ");
        }
    });
    return link;
    }
};
cellTable.addColumn(linkColumn, "link column");

...

public class AnchorCell extends AbstractCell<Anchor> {
@Override
public void render(Context context, Anchor h, SafeHtmlBuilder sb) {
    sb.append(SafeHtmlUtils.fromTrustedString(h.toString()));
}
}

- 但点击链接 - 什么也没发生

第二个问题:用 ClickHandler 的文本内容打开浮动(基于 div 左右,而不是分开的浏览器窗口)小狗的更好方法是什么?

4

2 回答 2

1

在 CellTable 中,您不会将 Anchor 小部件添加到表中。您只是添加了一些 HTML。小部件的所有功能都不会像往常一样工作,因为小部件实际上不在 table 中

您可以覆盖 onBrowserEvent 以获取单击单元格等事件。这些事件仍然会发生,因为它们是浏览器原生的,不需要小部件框架来传播。我认为这是达到您想要的效果的最佳方式。

于 2011-09-12T14:31:34.237 回答
0

我有和你类似的设置。一个带有超链接的 CellTable(现在是一个 DataGrid),但是当用户单击单元格而不是 link-y 位时,我想弹出一个编辑器小部件。如果他点击链接,我想要正常的 HTML 行为。

使用 ClickableTextCell 类创建列。细胞里储存着什么?我的用户记录数据库中的字符串 ID,其中包括用户的姓名和电子邮件。创建列时,我覆盖了 render 方法,以便将信息呈现为电子邮件链接:

Column<RowType, ColumnType> emailColumn = new Column<RowType, ColumnType>(new ClickableTextCell()){

    @Override
    public void render(Context context, T object, SafeHtmlBuilder sb) {
    /* Code that pulls the value in this column at this row, uses 
     * it to look up the name and the email, then does sb.appendX 
     * to build up the "<a href='emaillink'>name</a>" SafeHtml
     * construction.
     */
    }

 };

实际上,我有一个 Column 的子类,但你明白了。

瞧,页面上的一个活动 HTML 链接,但下面是一个可点击的文本单元格。我发现这比处理浏览器事件要容易得多。

我的许多细胞都使用相同的结构。ClickableTextCells 和特定类型的渲染代码以预期的格式呈现给用户。特别是,我们有一个动态选项列表类型的字段——也就是说,选项列表在单击发生之前是未知的。标准 selectionCell 要求在构建时建立一次选择列表,这就是让我得到这个解决方案的原因。因此,我使用了这种技术,而不是标准的 SelectionCell 下拉菜单,如果没有一些认真的工作**,它无论如何都无法工作。当 ClickableTextCell 触发时,我已将 FieldUpdater 设置为构建一个包含 DataGrid 的弹出窗口,该 DataGrid 列出了此选择的当前合法值集(由数据库的当前状态确定)。当用户做出选择并点击保存按钮时,

实际上,我的解决方案已将 ClickableTextCell 扩展为 DoubleClickableTextCell,因此您需要双击才能激活编辑器。当然不是必需的,但它允许用户在网格周围随意单击,而不会在他面前爆炸。

** 除了动态方面,这种动态选择可能是很长的列表,所以下拉列表是一个糟糕的选择。最好呈现一个用户可以滚动浏览、搜索、过滤等的 DataGrid。

于 2011-09-12T16:57:26.990 回答