2015-08-31 77 views
1

我该怎么做?

我有一个现有的页面(由系统自动生成,我没有任何控制),其中我注入GWT代码来修改基于某些列加载后页面的行为,并增强了功能这一页。例如,添加我的GWT代码后,其中一个表格列中的单元格变为可点击,当用户点击它时,会在弹出式面板中向用户显示其他信息。所有这一切工作正常。GWT检测DOM更改或修改

问题是什么?

我在其中注入我的代码的通用页面具有分页的表格,每次显示15行。现在,当我加载/刷新页面时,我的GWT代码会在特定列中插入和吸收事件,这些列会向单元添加功能(如上所述)。但是,当用户使用左右按钮导航分页结果时,页面不会刷新,因为它是异步调用。新的15行中的特定列现在没有沉没事件,因为GWT代码不知道页面已更改。

我想找到一种方法来告诉我的GWT代码页面已经改变,它应该吸收事件到新的15行的特定列的单元格,但无法找到任何方法或机制来帮助我捕获DOM /文档更改事件。我试过这样做,但没有帮助:

new ChangeHandler(){ 

      @Override 
      public void onChange(ChangeEvent event) { 
       Window.alert("Something Changed"); 

      } 

这是可能的我失去了一些非常明显的东西。发布这个问题来了解是否有一种简单的方法可以找出GWT中DOM的变化。没有运气搜索过DOM/Document change/mutation /等。

如果有人知道如何检测DOM中的GWT变化真的很感谢否则会继续使用本机突变观察员编写本机代码。

+1

分页按钮是生成页面的一部分吗?你知道那里有身份证吗? –

+0

是分页按钮是生成的页面的一部分,只是检查他们确实有ID。我想我会得到你建议的解决方案。感谢El提供了一个方向。 –

回答

2

你可以尝试这样的事情:

首先获得输入元素搭配:

InputElement goOn = DOM.getElementById("IdOfGoOnButton").cast(); 
InputElement goBack = DOM.getElementById("IdOfGoBackButton").cast(); 

下一页添加原生事件处理程序:

Event.addNativePreviewHandler(new Event.NativePreviewHandler() { 
    @Override 
    public void onPreviewNativeEvent(Event.NativePreviewEvent event) { 
    if (event.getTypeInt() == Event.ONCLICK) { 
     if (event.getNativeEvent() 
       .getEventTarget() != null) { 
     Element as = Element.as(event.getNativeEvent() 
            .getEventTarget()); 
     if (as.getTagName() 
       .toLowerCase() 
       .equals("input")) { 
      InputElement clickedElement = as.cast(); 
      if (clickedElement.getId().equals(goOn.getId()) || 
       clickedElement.getId().equals(goBack.getId())) { 
      // one of the paging button is pressed 
      } 
     } 
     } 
    } 
    } 
}); 

希望有所帮助。

+0

感谢一吨埃尔。能够解决它。事实上,Event类的介绍给了我们新的见解。我意识到Event.addNativePreviewHandler给出了网页的完整敏感性,我甚至可以知道一个人是否将鼠标移动到页面上。现在,我只需要在任何地方随时随地点击页面,并且每当用户点击时,我都会再次将事件放到表格中特定列的单元格中,并且它像魔术一样工作。沉没发生在点击事件被处理之前,因此当新页面加载并且用户点击单元时功能被触发。 –