我试图动态更新与Prototip和原型制成的工具提示。我试图做到这一点的方法可能不是最好的方法(因此,如果你知道一个更好的方式,将是有益的),但我能想到的唯一办法做到这将是持有的JavaScript的div元素和更新为了更新提示的div元素中的JavaScript。然而,这似乎是每一个JavaScript的更新时间,因为内存泄漏,创建一个新的提示对象,并存储在存储器中。如果没有这样做的更好的办法,我怎么能清除内存?

我在此简单的脚本来测试存储器泄漏,现在我需要找出如何使它使得存储器泄漏在此示例修补。

for (i=0; i<1000; i++) {
    $('testdiv').update("<script type='text/javascript'> new Tip('chips_tip', 'Your Chips', {style: 'creamy',stem: 'topLeft',hook: { mouse: true, tip: 'topLeft' },offset: { x: 10, y: 16 },delay: 0.04,width: 85}); <\/script>");
}

下面是什么工具提示的JavaScript通常:

new Tip('element', "Description", {
    style: 'creamy',
    stem: 'topLeft',
    hook: { mouse: true, tip: 'topLeft' },
    offset: { x: 10, y: 16 },
    delay: 0.04,
    width: 85
});
有帮助吗?

解决方案

它似乎新提示构建体可以采取的元素,而不是工具提示文本作为参数。你可能想尝试使用。我没有这样做,所以你必须自己去试试吧。首先,创建工具提示布局(含DIV标签提示文本)和风格它像往常一样。设置的这个样式属性的div“显示:无”。然后尝试创建前端像这样:

new Tip('source', $('tooltip_container'));

您可以接着使用更改工具提示的文字:

$('tooltip_container').update('new tooltip text');

这是不够分配工具提示构建一个变量在全局空间,因为在我看来,prototip插入它自己的工具提示HTML的东西到DOM。我的猜测是,每一次你所说的“新提示”您要添加额外的HTML到DOM。然后,这些对象的引用DOM节点,所以他们从来没有垃圾回收。应该很容易为你检查出使用测试代码和萤火检查DOM的。

您最后的选择就是看prototip源代码,看看它是否有某种一个的setToolTipText功能。然后,你也许能够做这样的事:

var tooltip = new Tip('element', 'text');
// snip
tooltip.setText('some new text');

如果没有帮助,只是通过电子邮件prototip的作者。我相信他会很乐意提供帮助。

其他提示

正如您已经注意到,简单地实例化新提示将意味着一个新的提示对象被创建并存储在存储器中。

要解决这个问题,需要将提示分配给一个独特的可变在全球范围内。 即实例变量“提示”,然后使用“工具提示=新提示”,在你的日常(这将只允许1提示是在一个时间,我会假设使用的是你想要的只是一个可以显示什么)。垃圾回收应该采取其他的事情。

通过实例化“提示”对象实际执行构造函数的调用,例如简单的函数调用,该手柄并相应地更新的可视元素,但一旦该对象不被任何变量引用它应该通过垃圾收集器来收集。如果你要确保在你可以做下一个:

var tip = new Tip( whatever);
// before next update do delete tip;

它看起来像这样实际上是在原型内存泄漏。 根据该,泄漏被固定在1.6 0.1

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top