0

我们在表格单元格中有一个链接。当用户将鼠标悬停在链接上时,会进行异步 RPC 调用并更新悬停文本(标题属性)。当用户仍然悬停在元素上时,我们看到悬停文本发生变化的结果非常不一致。在某些机器上它可以正常工作,而在其他机器上则根本不行。

我们缓存结果,因此如果用户再次触发悬停,工具提示文本将正确显示。

当用户仍然悬停在锚点上时,更新锚点的标题属性是否有技巧?

当 RPC 调用成功返回时,我们只需调用

link.setTitle(text);

调用

/**
   * Sets the title associated with this object. The title is the 'tool-tip'
   * displayed to users when they hover over the object.
   * 
   * @param title the object's new title
   */
  public void setTitle(String title) {
    if (title == null || title.length() == 0) {
      DOM.removeElementAttribute(getElement(), "title");
    } else {
      DOM.setElementAttribute(getElement(), "title", title);
    }
  }
4

2 回答 2

1

您在这里的代码并没有说明这个问题。setTitle毫无疑问,没有任何问题。但是在 mousehover 上触发异步调用并不是那么理想,因为您在这里面临的问题纯粹看起来像是源于异步调用完成所花费的时间。

我强烈建议在页面加载本身期间预取您需要在鼠标悬停时显示的数据,并直接设置该文本而不是异步调用。

于 2012-12-27T12:42:14.303 回答
0

当用户将鼠标移到链接上时,浏览器会将标题属性显示为工具提示。在您的情况下,如果未设置标题,则根本没有工具提示。当您的 RPC 调用返回并设置标题时,浏览器中不会发生任何事情,直到用户将鼠标从链接上移开,然后再移回链接上。所以一些工具提示不会显示出来,其他的(已经在之前的鼠标悬停上设置的)会显示出来:这种 UI 模式真的会让你的用户感到困惑。

您可能需要重新考虑您的设计。更好的方法是在链接旁边显示一个小的弹出面板。您可以完全控制此面板何时显示和隐藏。创建一个弹出面板。将 MouseOverHandler 添加到您的链接。当 MouseOverEvent 触发时,调度您的 RPC 调用。当呼叫返回时,填充弹出面板并将其显示在链接旁边。当用户离开时,隐藏弹出面板。

如果表格中有大量链接,显然可以对其进行优化:您可以对表格使用单个 MouseOverHandler,然后检查哪个元素是事件的来源。

于 2012-12-27T13:02:56.523 回答