2012-08-09 63 views
0
  • 我創建了一個新的CellTable。
  • 重寫onBrowserEvent2來處理鼠標事件。
  • 向表中添加一個新元素。

不幸的是,事件監聽器沒有處理添加的元素。它只處理最初的元素。GWT事件不適用於運行時添加的元素

table = new CellTable<Contact>() { 

    public void onBrowserEvent2(Event event) { 
    Element tr = Element.as(event.getEventTarget()); 

    boolean gotIt = false; 
    while (!gotIt && tr != null) { 
     if (!tr.getTagName().equals("TR")) { 
     tr = tr.getParentElement(); 
     continue; 
     } 
     gotIt = true; 
    } 

    if (tr == null) 
     return; 

    tr = Element.as(tr.getChild(1)); 

    Element out = DOM.createDiv(); 
    out.setInnerHTML("<a href='xxx'>Edit contact</a> | <a href='xxx'>Add visit plan</a> | <a href='xxx'>New visit</a>"); 

    switch (DOM.eventGetType(event)) { 
    case Event.ONMOUSEOVER: 
     tr.appendChild(out); 
     break; 
    case Event.ONMOUSEOUT: 
     tr.getChild(1).removeFromParent(); 
     break; 
    } 
    } 
}; 
+0

當你說「不工作」,究竟是什麼意思呢?請你能更具體。 – 2012-08-09 14:35:04

回答

0

如果你很好,你可以讓你所有的處理程序單獨聲明。

你總是可以直接添加鼠標處理程序是這樣的:

//代碼描繪MouseOverHandler。使用此對任何類型的GWT事件處理程序

  CellTable<String> cellTable = new CellTable<String>(); 

      cellTable.addDomHandler(new MouseOverHandler() { 

       @Override 
       public void onMouseOver(MouseOverEvent event) { 
        // Your logic 
       } 
      }, MouseOverEvent.getType()); 

的這應該有助於