私たちはすべて、ajaxの更新イベントで新しいdom要素にリバウンドする必要があることを知っています。はいデリゲートはオプションですが、デリゲートはすべてのシナリオで機能しません。たとえば、デリゲートはクリックイベントではなくロード時に簡単に行う必要のあるイベントに対しては役に立ちません。JQuery Ajax - デリゲートではなくコンテキストパラメタで要素をリバックする?
ではなく更新にリバウンドする必要があるデリゲートハンドラとハンドラの中に私のコードを分割し、私はむしろそのようなページが変更されるたびに呼び出されるコンテキストパラメータを持つ単一のメソッドを定義します
function onPageUpdate(context) {
$('a', context).click(...); // event handlers
$('.chart', context).addClass(...); // load handlers
}
DOM準備ができたら、これはcontextパラメータnullで呼び出されます。 ajaxの更新では、コンテキストは新しいdom要素を格納します。このようにして、委任またはajaxの更新をもう一度心配する必要はありません。
しかし、これを動作させるのに問題があります。与えられたajaxコールバック:
function onSuccess(data) {
// data contains new dom elements like: <div><a>Click</a><span>chart<span></div>
// replace old elements with new ones
$('a').replaceWith('a', data);
$('span').replaceWith('span', data);
// call pageUpdate with the new context
onPageUpdate(data);
}
私は期待どおりこの仕事をすることは可能ですか?置換はうまく動作しますが、onPageUpdateはこれらの新しい要素に何もバインドしていません。コンテキストが単なる文字列オブジェクトなので、私はそれを知りません。誰もこの仕事をする方法を考えることができますか?
これは、すべてのハンドラのためのメソッドとバインディングを必要とする要素だけがそれを所有するため、デリゲートより優れたソリューションです。
私はこれを試しましたが、バインディングは固執していませんでした。これは、シーンの背後にあるオブジェクト参照の問題の一部である可能性があります。私がそれが動作することを発見した1つの方法は、それが遅く感じるが、onPageUpdate($( 'a'))のような新しい要素で置き換えられるたびにページメソッドを個別に呼び出すことです – user842800