2012-12-27 61 views
0

我们在表格单元格中有一个链接。当用户将鼠标悬停在链接上时,会进行异步RPC调用,并更新悬停文本(标题属性)。我们看到,当用户仍然悬停在元素上时,悬停文本更改的结果非常不一致。在某些机器上它工作正常,而其他机器则完全没有问题。GWT - 动态更改锚点标题

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

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

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

回答

1

你的代码在这里没有按多讲问题。 setTitle毫无疑问地工作。但是,在mousehover上发起异步调用并不是那么理想,因为您在这里面临的问题纯粹看起来像源于异步调用完成所花费的时间。

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

0

当用户将鼠标移到链接上时,浏览器将标题属性显示为工具提示。在你的情况下,如果标题没有设置,则根本没有提示。当您的RPC调用返回并设置标题时,将不会在浏览器中发生任何事情,直到用户将鼠标从链接上移开,然后返回链接。因此,某些工具提示不会显示出来,其他工具提示(已经设置为以前的鼠标悬停)将显示出来:此用户界面模式会令您的用户感到困惑。您可能不得不重新考虑您的设计。更好的方法是在链接旁边显示一个小的弹出窗口。您可以完全控制此面板显示和隐藏的时间。创建一个弹出式面板。将MouseOverHandler添加到您的链接。当MouseOverEvent触发时,调度您的RPC调用。当调用返回时,填充弹出式面板并将其显示在链接旁边。当用户离开时,隐藏弹出式面板。

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