0

我想将图像添加到我的 celltable 中,为此我使用 imageResouce,如下所示

         interface Resources extends ClientBundle {
         @Source("close.png")
         ImageResource getImageResource();
          }

         Resources resources = GWT.create(Resources.class);

         deleteJobColumn = new Column<EmployerJobs, ImageResource>(new ImageResourceCell()) {
        @Override
        public ImageResource getValue(EmployerJobs object) {
              return resources.getImageResource();
        }
    };

它工作得很好,我在我的 celltable 中获取图像,但现在我想向该图像添加 clickhandler,为此我使用如下所示的字段更新器

         display.getListJobsWidget().getDeleteJobColumn().setFieldUpdater(

            new FieldUpdater<EmployerJobs, ImageResource>() {

                public void update(int index, EmployerJobs employerJobs,
                        ImageResource value) {

                                       Window.alert("Hello");

                }
            });

所以现在当我点击上面的图像单元格时,它应该说“你好”,但它没有做任何事情..任何解决方案..

谢谢

4

2 回答 2

2

ImageResourceCell没有任何接线可以调用ValueUpdater,它只是用于绘制图像并完成它。

你有几种方法可以改变它:

  • 子类ImageResourceCell化并覆盖 onBrowserEvent - 看看ButtonCell它是如何工作的
  • 请改用不同的单元类,例如ActionCell- 这不会从客户端获取任何数据,但会让您传入一个委托 nottead,该委托将在单击该事物时运行。使用ActionCell(SafeHtml,Delegate<C>)构造函数传入你的图片,以html的形式
  • 构建一个新的单元格,子类AbstractCell化,借用渲染代码ImageResourceCell和事件代码,ButtonCellActionCell使您的代码尽可能通用和可重用。
于 2012-01-05T22:13:58.530 回答
1

Colin 提供的第一个解决方案的示例。我发现覆盖 getConsumedEvents 有点棘手,但似乎效果很好。

public class ClickableImageResourceCell extends ImageResourceCell{
        public ClickableImageResourceCell(){
            super();
        }
        @Override
        public Set<String> getConsumedEvents() {
            Set<String> set = new HashSet<String>();
            set.add("click");
            return set;
        }
        @Override
        public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context, Element parent, ImageResource value, NativeEvent event, ValueUpdater<ImageResource> valueUpdater) {
            super.onBrowserEvent(context, parent, value, event, valueUpdater);
             if ("click".equals(event.getType())) {
                EventTarget eventTarget = event.getEventTarget();
                if (!Element.is(eventTarget)) {
                    return;
                }
                if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) {
                    // Ignore clicks that occur outside of the main element.
                    keyDown(context, parent, value, event, valueUpdater);
                }
            }

        }

          protected void keyDown(Context context, Element parent, ImageResource value,
              NativeEvent event, ValueUpdater<ImageResource> valueUpdater) {
            if (valueUpdater != null) {
              valueUpdater.update(value);
            }
          }
}
于 2012-06-29T01:42:06.697 回答