2012-01-05 79 views
0

我想將圖像添加到我的celltable,對於我使用imageResouce如下GWT:添加函數clickhandler到ImageResource細胞

  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"); 

       } 
      }); 

所以現在當我在上面的圖像細胞應該說「你好」點擊,但它沒有做任何事情。任何解決方案..

謝謝

回答

2

ImageResourceCell沒有任何接線來呼叫ValueUpdater,它只是設計來繪製圖像,並與它完成。

你可以改變這幾個方面:

  • 子類ImageResourceCell並重寫onBrowserEvent - 看看ButtonCell,看看如何能工作
  • 使用不同的細胞類,而不是像ActionCell - 這不會從客戶端獲取任何數據,但會讓您傳遞委託,而不會在單擊事件時運行。使用ActionCell(SafeHtml,Delegate<C>)構造函數圖像通過,在HTML的形式
  • 建立一個新的細胞,繼承AbstractCell,借用ImageResourceCell渲染代碼,並從ButtonCellActionCell事件代碼,讓您的代碼作爲通用的,可重複使用的可能。
0

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); 
      } 
      } 
}