jQuery метод .lock()
jQuery объект CallbacksОпределение и применение
jQuery метод .lock() объекта Callbacks позволяет заблокировать список обратных вызовов в текущем состоянии. Этот метод возвращает объект обратного вызова к которому он присоединен (this).
Обращаю Ваше внимание на то, что если объект Callbacks создан с флагом "memory" в качестве аргумента, то дополнительные функции могут быть добавлены и запущены после блокировки списка обратных вызовов (пример внизу страницы).
Отличие метода .disable() от метода .lock(), который позволяет отключить список обратных вызовов от выполнения чего-либо еще заключается в том, что метод .lock() блокирует только вызов функций, а не их добавление. Эту разницу можно ощутить при создании объекта Callbacks с ключом "memory" (пример ниже).
jQuery синтаксис:
Синтаксис 1.7:
callbacks.lock()
Добавлен в версии jQuery
1.7Пример использования
// возвращаем объект Callbacks и инициализируем переменную этим значением let myCallbacks = $.Callbacks(); // создаем функции и инициализируем переменные этими значениями const fn1 = (val) => console.log("1 " + val), fn2 = (val) => console.log("2 " + val); // добаляем функцию обратного вызова в список обратных вызовов объекта myCallbacks.add( fn1 ); // вызываем все ранее добавленные функции обратного вызова с заданным аргументом myCallbacks.fire( "hello" ); // вывод в консоль: 1 hello // проверяем заблокирован ли список myCallbacks.locked(); false // блокируем список обратных вызовов в текущем состоянии myCallbacks.lock(); // вызываем все ранее добавленные функции обратного вызова с заданным аргументом myCallbacks.fire( "hello" ); // вызов функций не произойдет так как список заблокирован // проверяем заблокирован ли список myCallbacks.locked(); true // добаляем вторую функцию обратного вызова в список обратных вызовов объекта myCallbacks.add( fn2 ); // вызываем все ранее добавленные функции обратного вызова с заданным аргументом myCallbacks.fire( "hello" ); // вызов функций не произойдет так как список заблокирован
В этом примере мы рассмотрели базовое использование функции $.Callbacks(), которую мы вызвали без параметра и возвратили объект Callbacks. После этого инициализировали две переменные, которые содержат стрелочную функцию.
После этого с помощью метода .add() объекта Callbacks мы добавили функцию в список обратных вызовов объекта Callbacks, и с помощью метода .fire() этого объекта вызываем все ранее добавленные функции обратного вызова с заданным аргументом. В результате чего мы вывели в консоль текстовое сообщение.
Далее с помощью метода callbacks.locked() мы определяем заблокирован ли список обратных вызовов, или нет, по очевидным причинам мы получаем логическое значение false, которое указывает на то, что список не заблокирован. После этого мы используем метод .lock(), который блокирует список обратных вызовов, и с помощью метода .fire() этого объекта вызываем все ранее добавленные функции обратного вызова с заданным аргументом. По той причине, что список заблокирован вызов нашей функции не произошел.
С помощью метода .locked() мы определяем заблокирован ли список обратных вызовов, и получаем логическое значение true, которое свидетельствует, что наш список действительно заблокирован. И наконец, с помощью метода .add() объекта Callbacks мы добавили функцию в список обратных вызовов объекта Callbacks, и с помощью метода .fire() этого объекта вызываем все ранее добавленные функции обратного вызова с заданным аргументом. Как вы можете заметить вызов наших функций не произошел по причине того, что список заблокирован.
В следующем примере мы рассмотрим нюанс использования метода .lock() для объекта Callbacks, который создан с флагом "memory":
// возвращаем объект Callbacks и инициализируем переменную этим значением let myCallbacks = $.Callbacks("memory"); // указываем параметр со значением memory // создаем функцию и инициализируем переменную этим значением const fn1 = (val) => console.log("1 " + val), fn2 = (val) => console.log("2 " + val); // добаляем функцию обратного вызова в список обратных вызовов объекта myCallbacks.add( fn1 ); // вызываем все ранее добавленные функции обратного вызова с заданным аргументом myCallbacks.fire( "hello" ); // вывод в консоль: 1 hello // блокируем список обратных вызовов в текущем состоянии myCallbacks.lock(); // вызываем все ранее добавленные функции обратного вызова с заданным аргументом myCallbacks.fire( "hello" ); // вызов функций не произойдет так как список заблокирован // добаляем функцию обратного вызова в список обратных вызовов объекта myCallbacks.add( fn2 ); // вызов функции происходит сразу после добавления (с запомненным значением): 2 hello // при использовании .disable() вызов бы не произошел // вызываем все ранее добавленные функции обратного вызова с заданным аргументом myCallbacks.fire( "hello" ); // вывод в консоль: 1 hello // при использовании .disable() вызов бы не произошел 2 hello
Главной особенностью флага memory является то, что он отслеживает предыдущие значения и вызовет любой обратный вызов, добавленный после того как список обратного вызова был вызван с последними "запомненными" значениями. Добавив новую функцию к списку обратных вызовов позволило нам продолжить использование списка обратных вызовов после того как он был заблокирован.
jQuery объект Callbacks