GWT的AbstractCell允许您创建自定义单元格,包括在单元格中渲染图像的功能。有没有办法通过设置图像的URL属性来显示图像和有一个与之关联的错误处理程序(在图像资源不可用或加载有问题时采取行动)?在测试中,图像属性正确呈现,但似乎没有包含错误处理程序。
以下是我尝试使用的示例代码:
new AbstractCell<String>() {
@Override
public void render (Context context, String value, final SafeHtmlBuilder sb) {
final Image testImage = new Image();
testImage.addErrorHandler(new ErrorHandler() {
@Override
public void onError(ErrorEvent event) {
// image SRC failed to load so pick a different image and set the tool tip
testImage.setResource(images.errorLoading()); // from an image bundle
testImage.setTitle("Image Load Failed");
}
});
// the value passed in is the image src
testImage.setUrl(value);
sb.append(SafeHtmlUtils.fromTrustedString(testImage.toString()));
}
我认为问题在于testImage.toString()
。要实现AbstractCell,您必须附加到SafeHtmlBuilder。在图像上使用toString()
方法时,图像URL设置正确,其他属性设置正确,但错误处理程序不包含在toString()
方法中(我能说得最好)。还有另一种方法可以解决这个问题吗?
答案 0 :(得分:1)
testImage.toString()
方法创建一个在单元格内呈现的简单HTML字符串。此HTML中没有处理程序。
您可以在render()
方法之外设置testImage的URL。给浏览器加载图像的时间(您可能必须使用Scheduler)。然后刷新/绘制Cell小部件。但是,我不确定用户是否会在所有图像加载之前都感到滞后。
请考虑使用ImageLoadingCell。