gpt4 book ai didi

java - Sencha,GXT 3,在网格中插入超链接

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:23 25 4
gpt4 key购买 nike

我有一个内联可编辑网格。我需要修改一个列以显示一个超链接,单击该链接将触发一些 UI 操作。

谢谢。

到目前为止我的代码。链接列中的链接呈现为常规字符串。我知道这是因为下面的 toString() 返回,但这是我需要帮助的地方。不确定如何正确渲染它。

linkConf = new ColumnConfig<LinkData, String>(lp.url(), 200, "URL");
...
Anchor myLink = new Anchor();
myLink.addClickHandler(new ClickHandler() {

@Override
public void onClick(ClickEvent cEv) {
someAction();
}

private void someAction() {

}

});


linkConf.setWidget(myLink, new SafeHtml() {
@Override
public String asString() {
return toString();
}
});

最佳答案

在我的一个项目中,我不得不这样做。我建议使用 CellClickHandler 而不是 try catch 对 anchor 的点击。

首先为您的点击操作创建更方便的处理程序:

public interface CellClickAction<P> {
void onCellClick(P proxy);
}

使用这个插件为网格中的每个 ValueProvider 保存映射:

public class GridCellClickPlugin<P> implements ComponentPlugin<Grid<P>> {

private final Map<ValueProvider<P, ?>, CellClickAction<P>> mapping;

public GridCellClickPlugin() {
this.mapping = new HashMap<ValueProvider<P, ?>, CellClickAction<P>>();
}

@Override
public void initPlugin(final Grid<P> component) {
component.addCellClickHandler(new CellClickHandler() {

@Override
public void onCellClick(CellClickEvent event) {
if (!mapping.isEmpty()) {
final ColumnConfig<P, ?> columnConfig = component.getColumnModel().getColumn(event.getCellIndex());
final CellClickAction<P> action = mapping.get(columnConfig.getValueProvider());
if (action != null) {
final P proxy = component.getStore().get(event.getRowIndex());
action.onCellClick(proxy);
}
}
}
});
}
}

为此列和初始化插件注册点击处理程序:

final GridCellClickPlugin<LinkData> plugin = new GridCellClickPlugin<LinkData>();
plugin.getMapping().put(lp.url(), new CellClickAction<LinkData>() {

@Override
public void onCellClick(LinkData proxy) {
//do the desired action here: redirect to some url, show pop-up window, etc
}
});
plugin.init(grid);

将您的文本呈现为链接:

linkConf = new ColumnConfig<LinkData, String>(lp.url(), 200, "URL");
linkConf.setCell(new AbstractCell<LinkData>() {

@Override
public void render(com.google.gwt.cell.client.Cell.Context context, LinkData value, SafeHtmlBuilder sb) {
final Anchor anchor = new Anchor(value.getSomeText());
sb.appendHtmlConstant(anchor.getElement().toString());
}
});

关于java - Sencha,GXT 3,在网格中插入超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13241783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com