我在我的datagrid上定义了一个safehtmlcell。html呈现得很好,但我需要那个单元格是可点击的,它可以在clickabletextcell上工作。下面是我的代码:
SafeHtmlCell itemCell = new SafeHtmlCell();
Column<MyStoreItems, SafeHtml> itemNameColumn = new Column<MyStoreItems, SafeHtml>(itemCell) {
@Override
public SafeHtml getValue(MyStoreItems storeItem) {
SafeHtmlBuilder sb = new SafeHtmlBuilder();
sb.appendHtmlConstant("<table>");
sb.appendHtmlConstant("<td style='font-size:95%;'>");
sb.appendEscaped(storeItem.getItemName());
sb.appendHtmlConstant("</td></tr><tr><td>");
sb.appendEscaped(storeItem.getPackingUnit() + " " + storeItem.getStoreItemName());
sb.appendHtmlConstant("</td></tr></table>");
return sb.toSafeHtml();
}
};
itemNameColumn.setFieldUpdater(new FieldUpdater<MyStoreItems, SafeHtml>() {
@Override
public void update(int index, MyStoreItems storeItem, SafeHtml value) {
selectedStoreItem = storeItem;
selectedIndex = index;
showSelectedStoreItems(index, storeItem);
}
});有什么办法可以让safehtml单元格变得可点击吗?
发布于 2013-09-11 18:17:01
您必须创建一个扩展AbstractCell的类,然后覆盖onBrowserEvent()方法。
public class MySafeHtmlCell extends AbstractCell<SafeHtml> {
public MySafeHtmlCell() {
super(BrowserEvents.CLICK);
}
@Override
public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) {
if (value != null) {
sb.append(value);
}
}
@Override
public void onBrowserEvent(Context context, Element parent, SafeHtml value, NativeEvent event,
ValueUpdater<SafeHtml> valueUpdater) {
String eventType = event.getType();
if (BrowserEvents.CLICK.equals(eventType)) {
// Do something...
}
}
}在上面的实现中,我复制了一个SafeHtmlCell实现,并添加了点击事件处理。当然,您应该考虑只扩展SafeHtmlCell而不是重写它。
无关注意:考虑使用HtmlTemplates,而不是使用safeHtmlBuilder
public interface MyTemplate extends SafeHtmlTemplates {
@Template("<span class=\"{3}\">{0}: <a href=\"{1}\">{2}</a></span>")
SafeHtml messageWithLink(SafeHtml message, String url, String linkText,
String style);
}发布于 2013-09-12 04:09:44
只需使用ClickableTextCell即可。它扩展了AbstractSafeHtmlCell并使用了click和keydown事件。
https://stackoverflow.com/questions/18737664
复制相似问题