Что такое крючки и обратные вызовы jQuery?

Мне трудно концептуализировать, что именно обратные вызовы или крючки находятся в jQuery. Они, кажется, собраны вместе, но я не знаю разницы между ними.

из того, что я понимаю из других сообщений о обратных вызовах, например этой, обратный вызов-это просто функция A, которую вы передаете другой функции B, которая вызывает a после b. (Что может быть совершенно неправильно, поправьте меня если это так).

Я действительно не имею никакого понятия о крючках, кроме заявление " вы должны использовать hook / callback."Что-то заставляет меня сомневаться, что они похожи...

2 ответов


ваше определение близко, но недостаточно. Обратный вызов-это функция A, которую вы передаете другой функции B (или объекту B), который B вызовет в соответствующей точке.

для некоторых функций "соответствующая точка" после завершения этой функции, как вы описываете.

многие функции или объекты определяют набор "определенных точек" или событий, когда могут быть запущены обратные вызовы. Например, если у вас есть элемент управления, который периодически обновляется через AJAX, он может определить событие, которое происходит, когда он собирается обновить, событие, которое происходит после возвращения обновления, и событие, которое происходит после отображения результатов. Для любого из этих событий вы можете передать ему свою пользовательскую функцию, которая должна вызываться при возникновении этого события.

этот определенный набор точек, где может быть вызвана пользовательская функция, - это то, что люди подразумевают под "крючками". Это места, которые вы можете подключить к своей функциональности в prebuilt библиотека.

редактировать, чтобы добавить:

ОП попросил простой пример крючка.

предположим, я написал функцию, которая принимает список имен пользователей и предназначена для просмотра списка, поиска деталей каждого человека и возврата заполненного списка объектов людей.

возможно, я хочу дать программисту, использующему мою функцию, возможность указать, что должно произойти, когда имя пользователя не найдено в моей базе данных. Один программист может захотеть функция для ошибки, другой может захотеть, чтобы он просто игнорировал отсутствующий пример, другой может захотеть, чтобы он искал в другой базе данных, другой может захотеть, чтобы он построил пустой объект person.

таким образом, моя подпись функции может быть чем-то вроде

function getPeople( arrayOfUsernames, missingUsernameCallback )

в функции, всякий раз, когда я прихожу к имени пользователя, которое я не могу найти в своих данных, я просто вызываю

missingUsernameCallback( notFoundUsername );

теперь программист может вызвать функцию как

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") });

etc. Список возможных обратных вызовов будет определяться функцией и должно быть в документации API (наряду с параметрами, которые могут быть переданы в обратные вызовы, и т. д.). Этот список обратных вызовов-крючки.


Я бы предположил, что в контексте, который вы видели, слово "используемые люди" означает обратные вызовы, которые являются именно тем, что вы думаете (в случае jQuery крюк и обратный вызов-одно и то же).

обратный вызов для функции animate() jQuery, например, будет выполняться, как только анимация будет завершена.

некоторые встроенные функции и другие плагины jQuery могут определять несколько обратных вызовов для различных этапов выполнения. Например плагин, который отображает всплывающее окно для пользователя может иметь обратный вызов, когда пользователь нажимает на ссылку, чтобы показать поле, но до того, как поле фактически отображается (этот обратный вызов может использоваться для хранения некоторых данных, фактическое всплывающее окно понадобится, например). Те же всплывающие функции могут также выполнять функцию обратного вызова, когда поле снова закрыто - этот обратный вызов может быть использован для изменения страницы или сохранения некоторых данных, например.