質問

私は動的にPrototipとプロトタイプで作られたツールチップを更新しようとしています。私はこれを行うにしようとしています方法は、おそらく最良の方法(あなたが参考になるより良い方法を知っているので、もし)ではありませんが、私はそれを行うに考えることができる唯一の方法は、div要素と更新でJavaScriptを保持するだろうツールチップを更新するために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がDOMにそれ自身のツールチップのhtmlのものを挿入するように思えるので、

これは、グローバル空間内の変数に構築ツールチップを割り当てるには十分ではありません。私の推測では、毎回、あなたがDOMに余分なHTMLを追加している「新しいヒント」を呼び出すことです。これらのオブジェクトのは、DOMノードを参照するので、彼らはごみ収集されることはありません。あなたはDOMを検査するテストコードと放火犯を使用してそれをチェックアウトするために簡単なはずです。

あなたが持っている最後のオプションは、それがsetTooltipText機能のいくつかの並べ替えを持っているかどうかを確認するためにprototipのソースコードを見ることです。そして、あなたはこのような何かを行うことができるかもしれない。

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