GWT - 动态更改主播标题

时间:2012-12-27 12:19:48

标签: javascript gwt

我们在表格单元格中有一个链接。当用户将鼠标悬停在链接上时,将进行异步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);
    }
  }

2 个答案:

答案 0 :(得分:1)

这里的代码没有说明问题。 setTitle毫无疑问地解决了任何问题。但是在mousehover上发出异步调用并不是那么令人满意,因为你所面临的问题纯粹看起来像是由于异步调用完成所花费的时间而产生的。

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

答案 1 :(得分:0)

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

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

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