【问题标题】:GWT Detect DOM changes or modificationsGWT 检测 DOM 更改或修改
【发布时间】:2015-09-01 04:59:59
【问题描述】:

我想做什么?

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

【问题讨论】:

  • 分页按钮是生成页面的一部分吗?你知道那里的id吗?
  • 是的,分页按钮是生成页面的一部分,只是检查了它们是否有 id。我想我得到了你建议的解决方案。非常感谢 El 的指点。

标签: dom gwt mutation


【解决方案1】:

你可以试试这样的:

首先获取输入元素:

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

希望对您有所帮助。

【讨论】:

  • 非常感谢 El。能够解决它。事实上,对 Event 类的介绍给出了新的见解。我意识到 Event.addNativePreviewHandler 提供了网页的完全敏感性,我什至可以知道一个人是否将鼠标移动到页面上。现在,我只是在任何地方寻找页面上的点击,每当用户点击时,我都会再次将事件下沉到表格中特定列的单元格,它就像魔术一样工作。下沉发生在处理单击事件之前,因此当新页面加载并且用户单击单元格时,会触发功能。
猜你喜欢
  • 2018-05-19
  • 2010-09-07
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多