【问题标题】:GWT buttons not responsive after RequestBuilder callbackRequestBuilder 回调后 GWT 按钮无响应
【发布时间】:2013-04-21 16:49:04
【问题描述】:

GWT 2.5.1;将 Eclipse 4.2 与 GPE 结合使用;
使用 UiBinder 指定的 UI

该应用会显示一个包含“开始”按钮的启动画面。该按钮的点击处理程序进行各种初始化,包括隐藏自身和显示其他三个按钮、图像和文本;它还通过 RequestBuilder 发起服务器请求 (XMLHttpRequest)。 RequestBuilder 回调使用返回的服务器数据在画布元素中绘制条形图。

单击“开始”按钮后,浏览器窗口看起来与上述所有视觉元素一样。但是这三个按钮对点击没有响应。不仅没有调用它们的处理程序,当鼠标单击它们时,它们也不会显示激活的轻微视觉指示。浏览器未冻结;例如,如果调整窗口大小,则会调用应用的调整大小处理程序。

基于日志记录:“Go”按钮处理程序返回后,RequestBuilder 回调执行;然后“什么都没有发生”,即没有更多的日志输出(除非我调整窗口大小)。

FWIW 这是我的第一次 GWT 尝试。

【问题讨论】:

  • 需要一些代码。没有它,只是猜测;)
  • @AndreaBoscolo 我了解,但我不知道要提供什么代码。ui.xml 和两个可能相关的 java 源文件总共大约 1,500 行。我想一些有根据的猜测是我所希望的最好的:什么样的错误可能导致问题?

标签: gwt


【解决方案1】:

您可以在 UiBinder 文件中而不是在 Java 代码中设置按钮的位置吗?将它们放在 Horizo​​ntalPanel 中,它们将自动间隔。

而不是在元素级别进行交互以隐藏按钮,而是使用 setVisible(true); 调用您的按钮实例;例如,buttonA.setVisible(true)

【讨论】:

  • 如问题中所述,“使用 UiBinder 指定的 UI”。间距/布局没有问题。并且 setVisible 使用“显示”元素属性,在我的例子中,它具有影响布局的不良效果。
  • 好的。我被误读了您的一个回复误导了“我刚刚发现问题与我在同一位置有按钮的事实有关,其中只有某些按钮应该在给定时间可见”。跨度>
【解决方案2】:

(评论太长)

我刚刚发现问题与我在相同位置有按钮这一事实有关,其中只有某些按钮应该在给定时间可见。换句话说,用户将在页面之一的相同位置看到:

ButtonA ButtonB ButtonC

ButtonD ButtonE ButtonF

BigButtonG (as wide either of the preceding groups)

问题在于,无论可见性如何,最后声明的上述三个显示中的任何一个都具有(实际上)更高的 z-index 并且是唯一可以响应鼠标的显示。所以我即将实现一个在显示/隐藏按钮组的代码中显式设置 div z-indexes 的解决方案。

【讨论】:

  • 我之前评论中指出的解决方案工作正常。每当我显示/隐藏包含按钮组的 div 时,我都会添加/删除 z-index:9999 样式以及删除/添加可见性样式:hidden。
【解决方案3】:

通过实验,我找到了部分答案。三个非响应按钮在 ui.xml 文件中声明,其中 {style.hidden} 引用了我的 .css 中的可见性:隐藏属性。在 java 代码中,我使用以下命令取消隐藏这些按钮:

protected void showElement(Element e) {
  e.removeClassName(style.hidden());
  }

显然以隐藏的方式开始生活,然后以这种方式显示不足以激活按钮。我即将开始研究为什么会这样,但只要我没有发表评论表明我不那么无知,仍然欢迎回答这个“较小”的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多