$ .Callbacks (). Disable () vs $ .Callbacks (). Lock ()

La documentation de jQuery pour les deux énonce fondamentalement la même chose, donc je me demandais s’il y avait une différence majeure entre les deux Merci!

La documentation à ce sujet est vraiment très mauvaise, alors voici ce que j’ai trouvé en étudiant le code source :

lock empêche uniquement les futurs appels d’ fire , mais n’empêche pas l’ add fonctions.


Voici un rapide aperçu des méthodes:

  • empty – Supprime tous les rappels enregistrés jusqu’à présent.
  • lock – Empêche d’autres appels à être fire , mais permet d’ add davantage de rappels.
  • disable – Empêche les appels suivants à fire et à add .

Pour comprendre tout cela, commençons par une explication de l’indicateur de memory :

Si l’object de rappel est construit avec l’indicateur de memory , il gardera une trace du dernier appel déclenché et tout rappel ajouté plus tard sera immédiatement appelé. Voici un exemple :

 var callbacks = $.Callbacks('memory'); callbacks.add(function(){ console.log('first'); }); callbacks.fire(); callbacks.add(function(){ console.log('second'); }); 

Cela va également se connecter en second , même si elle a été ajoutée après l’appel du fire .


Si vous le disable , il effacera complètement la mémoire. Voici un autre exemple :

 var callbacks = $.Callbacks('memory'); callbacks.add(function(){ console.log('first'); }); callbacks.fire(); callbacks.disable(); callbacks.add(function(){ console.log('second'); }); callbacks.fire(); 

Cela ne fera que se connecter en premier , car les callbacks ont été désactivés avant l’ajout de la deuxième fonction.


Toutefois, si vous utilisez plutôt le lock , les fonctions ajoutées ultérieurement seront appelées. Voici un autre exemple :

 var callbacks = $.Callbacks('memory'); callbacks.add(function(){ console.log('first'); }); callbacks.fire(); callbacks.lock(); callbacks.add(function(){ console.log('second'); }); callbacks.fire(); 

Cela vous connectera également en second lieu , mais seulement une fois; étant donné que l’object a été lock , tout appel au fire sera ignoré.