2012-08-09 36 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()); 

的这应该有助于