2011-07-18 34 views
8

jQueryでコールバックやフックが正確に何であるかを概念化するのに苦労しています。彼らは一緒にまとまっているようだが、私はそれらの違いを知らない。jQueryフックとコールバックとは何ですか?

thisのようなコールバックに関する他の投稿からわかるように、コールバックは、一度Bを呼び出した別の関数Bに渡す単なる関数Aです。 (それは完全に間違っているかもしれませんが、もしそうなら私を修正してください)。

「フック/コールバックを使用する必要があります」という文以外のフックには、実際には何の概念もありません。何かが私にそれらが似ていることを疑うことになります...

答えて

11

あなたの定義は近すぎますが、不十分です。コールバックは、Bが他の関数B(またはオブジェクトB)に渡す関数Aです。を適切な点に呼び出します。

いくつかの機能では、「適切なポイント」は、その機能が完了した後のものです。

多くの関数またはオブジェクトは、コールバックを起動できるときに一連の「特定のポイント」またはイベントを定義します。たとえば、AJAXを介して定期的に更新されるコントロールを持っている場合、更新しようとしているときに発生するイベント、更新が​​戻った後に発生するイベント、結果が表示された後に発生するイベントが定義されます。これらのイベントのいずれかに対して、そのイベントが発生したときに呼び出されるカスタム関数を渡すことができます。

カスタム関数が呼び出される定義済みのポイントセットは、「フック」が意味するものです。彼らはあなたの機能をあらかじめ構築されたライブラリに繋ぐことができる場所です。

追加するように編集:

OPは、フックの簡単な例を求めました。

ユーザー名のリストを取得し、リストを通過し、各ユーザーの詳細を検索し、人物オブジェクトの入力済みリストを返すように設計された関数を作成したとしましょう。

多分、私の機能を利用するプログラマーに、自分のデータベースにユーザー名が見つからないときに何が起こるべきかを指定できるようにしたいと考えています。あるプログラマーは、関数がエラーを出してしまい、別のプログラマーが欠けている例を無視したいかもしれないし、別のプログラマーが別のデータベースを見たいと思うかもしれないし、別のプログラマーが空のpersonオブジェクトを作りたいかもしれない。

だから私の関数のシグネチャは、私は私のデータでは見つけることができないユーザ名に来る時はいつでも、私はちょうど今

missingUsernameCallback(notFoundUsername); 

を呼び出し、関数内

function getPeople(arrayOfUsernames, missingUsernameCallback) 

のようなものかもしれませんプログラマは、

のような関数を呼び出すことができます
getPeople(["adam","betty","charlie"], function(name){ alert("Missing username " + name)}); 

私は不足しているユーザー名を押すたびに、私は私に渡された関数を呼び出します。

ことが可能とコールバックのリストは、関数で定義されたとすべきであろう

getPeople(["adam","betty","charlie"], 
     {startOfListCallback:  function(){ alert("I'm starting the list")}, 
     missingUsernameCallback: function(){ alert("Missing username"!)}, 
     endOfListCallback:  function(){ alert("I'm at the end of the list") }); 

などのように呼び出すことができるよう、より複雑なケースでは、私は、複数のコールバック関数を含むオブジェクトを受け入れるために必要があるかもしれませんがAPIドキュメント(コールバックに渡すことができるパラメータなど)を参照してください。そのコールバックのリストはフックです。

+0

コールバックについての明確な説明。あなたはフックの簡単な例を提供してもよろしいですか? – stinkycheeseman

+1

例を追加するように編集しました。 –

+0

素晴らしいです、ありがとうございます。あなたは本当に私がこれを理解するのを手伝った! – stinkycheeseman

1

私は文脈の中であなたが使用した人のコールバックを意味していると思いますが、これはまさにあなたが思うものです(jQueryの場合、コールバックは同じものです)。

たとえば、jQueryのanimate()関数のコールバックは、アニメーションが完了するとすぐに実行されます。

組み込みの関数やその他のjQueryプラグインの中には、さまざまな実行段階で複数のコールバックを定義するものがあります。たとえば、ユーザーのポップアップボックスを表示するプラグインでは、ユーザーがボックスを表示するためにリンクをクリックしたときに、実際に表示される前にコールバックを持つことができます(このコールバックを使用して実際のポップアップが表示されます)。例えば、必要性)。同じポップアップ関数は、ボックスが再び閉じられたときにコールバック関数を実行することもあります。このコールバックは、ページを変更したり、いくつかのデータを保存するために使用できます。

+0

私は実際にポップアッププラグインに取り組んでいますので、これをあなたの例として使用したことは非常識です。ありがとう! – stinkycheeseman

関連する問題