私はこの質問に少し混乱しています。とに戸惑うからだと思います。実際、これらはjQueryの完全に無関係な機能です。それぞれを個別に説明します。promise
delegate
delegate
delegate
jQuery1.4.2で導入されたjQueryの機能です。live
(これは、 jQuery 1.3で追加された機能へのより良いアプローチです)。これは、DOMの変更、特にAJAX呼び出しに伴う特定の問題を解決します。
イベントハンドラーをバインドするときは、それを選択範囲にバインドします。したがって、イベントハンドラーをクラス$('.special').click(fn)
のすべてのメンバーにバインドするために行うことができます。special
これらの要素にバインドするため、これらの要素の1つからクラスを削除しても、イベントは引き続きトリガーされます。逆に、クラスを要素に追加する(または新しい要素をDOMに追加する)場合、イベントはバインドされません。
これを軽減する「イベントバブリング」と呼ばれるJavascriptの機能があります。イベントがトリガーされると、最初にブラウザはイベントが発生した場所を要素に通知します。次に、DOMツリーを上って、各祖先要素に通知します。これは、DOMツリーの上位にある要素でイベントハンドラーをバインドでき、任意の子要素(ハンドラーがバインドされたときに存在しなかった要素でも)でイベントがトリガーされることを意味します。
delegate
これのjQueryの実装です。まず、親要素を選択します。次に、セレクターを指定します。ハンドラーは、元の要素がこのセレクターと一致する場合にのみ実行されます。次に、と同様に、、、click
などのイベントタイプを指定します。最後に、イベントハンドラーを指定します。submit
keydown
bind
$('#containingElement').delegate('a.special', 'click', function() {
alert('This will happen on all links with the special class');
});
promise
promise
jQuery機能セットへのもう1つの比較的最近の追加です。これはDeferred
、jQuery1.5で導入された概念の一部です。(「据え置き」と「委任」の音の類似性がおそらく混乱の原因だと思います。)これは、非同期コードの複雑さを抽象化する方法です。によって返されるオブジェクトはオブジェクトであるため、これの最良の例はAJAX呼び出しを使用$.ajax
するDeferred
場合です。例えば:
$.ajax({
url: 'somepage.cgi',
data: {foo: 'bar'}
}).done(function() {
// this will be run when the AJAX request succeeds
}).fail(function() {
// this will be run when the AJAX request fails
}).always(function() {
// this will be run when the AJAX request is complete, whether it fails or succeeds
}).done(function() {
// this will also be run when the AJAX request succeeds
});
$.ajax
したがって、複数のハンドラーをバインドでき、最初の呼び出しの後にそれらをバインドできることを除いて、多くの点で呼び出しで成功ハンドラーをバインドするのと同じです。
非同期で処理することが役立つもう1つの方法は、アニメーションです。関数にコールバックを提供することもできますが、上記で提供したAJAXの例と同様の構文でこれを行う方がよいでしょう。
jQuery 1.6では、この機能が可能になりpromise
、この実装の一部になっています。jQueryの選択を呼び出すpromise
と、オブジェクト内のすべてのアニメーションが完了したときに、イベントハンドラーをバインドできるオブジェクトが取得されます。
例えば:
$('div.special').fadeIn(5000).promise().then(function() {
// run when the animation succeeds
}).then(function() {
// also run when the animation succeeds
});
繰り返しになりますが、これは従来の方法と効果的に似ていますが、柔軟性が追加されます。後でハンドラーをバインドすることも、複数のハンドラーをバインドすることもできます。
概要
基本的に、との間には重要な関係はありませんdelegate
がpromise
、どちらも最新のjQueryの便利な機能です。