2012-04-16 52 views

回答

0

像這樣的東西? ;)

public class CellTableExample implements EntryPoint, ClickHandler { 

    private static class SomeEntity { 
     /* ... */ 
    } 


    private static class ClickableTextHeader extends TextHeader { 

     private ClickHandler handler; 

     public ClickableTextHeader(String text, ClickHandler handler) { 
      super(text); 
      this.handler = handler; 
     } 

     @Override 
     public void onBrowserEvent(Context context, final Element elem, 
       final NativeEvent event) { 

      //maybe hijack click event 
      if(handler != null) { 

       if(Event.ONCLICK == Event.getTypeInt(event.getType())) { 

        handler.onClick(new ClickEvent() { 
         { 
          setNativeEvent(event); 
          setRelativeElement(elem); 
          setSource(ClickableTextHeader.this); 
         } 
        }); 
       } 
      } 

      //default dom event handler 
      super.onBrowserEvent(context, elem, event); 
     } 
    } 

    CellTable<SomeEntity> cellTable; 
    TextColumn<SomeEntity> firstColumn; 
    TextColumn<SomeEntity> secondColumn; 
    TextColumn<SomeEntity> thirdColumn; 

    @Override 
    public void onModuleLoad() { 

     /* somehow init columns - it's not the point for this example */ 

     cellTable.addColumn(firstColumn, new ClickableTextHeader("First column header", this)); 
     cellTable.addColumn(secondColumn, new ClickableTextHeader("Second column header", this)); 
     cellTable.addColumn(thirdColumn, new ClickableTextHeader("Third column header", this)); 
    } 

    @Override 
    public void onClick(ClickEvent event) { 
     ClickableTextHeader source = (ClickableTextHeader) event.getSource(); 
     Window.alert(source.getValue()); 
    } 
} 

劫持事件可能看起來簡單,如果我們用「簡單的監聽器接口」 - 我只是想成爲「semanticaly符合外的開箱處理程序」 :)

相關問題