GWT检测DOM更改或修改

时间:2015-08-31 11:09:11

标签: dom gwt mutation

我想做什么?

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

问题是什么?

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

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

new ChangeHandler(){

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

            }

我有可能错过一些非常明显的东西。发布此问题以了解是否有一种简单的方法来确定GWT中的DOM更改。没有运气搜索DOM /文件更改/变异/等。

如果有人知道如何检测GWT中的DOM更改,我将非常感激,否则将继续使用本机变异观察器编写本机代码。

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

首先获取输入元素:

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

接下来添加一个原生的EventHandler:

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

希望有所帮助。