1

我想做什么?

我有一个现有页面(由系统自动生成,我对其没有任何控制权),我在其中注入 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 更改,将不胜感激,否则将继续使用本机突变观察器编写本机代码。

4

1 回答 1

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

希望有帮助。

于 2015-08-31T20:59:59.657 回答