Comment mettre en place une serrure en JavaScript

Comment quelque chose d'équivalent à lock en C# être implémenté en JavaScript?

Pour expliquer ce que je pense, un cas d'utilisation simple:

Utilisateur clique sur le bouton B. B soulève un événement onclick. Si B est dans event-state l'événement attend B être dans ready-state avant de se propager. Si B est dans ready-state, B est verrouillé et est mis à event-state, puis l'événement se propage. Lorsque l'événement est de propagation est complet, B est fixé à ready-state.

J'ai pu voir comment quelque chose de proche de ce qui peut être fait simplement en ajoutant et en supprimant la classe ready-state à partir du bouton. Cependant, le problème est que l'utilisateur peut cliquer sur un bouton deux fois de suite, plus vite que la variable peut être définie, de sorte que cette tentative de verrouillage va échouer dans certaines circonstances.

Personne ne sait comment mettre en œuvre un verrou qui ne manquera pas d'en JavaScript?

  • Des réponses qui prennent en compte parallèle JS exécution (c'est à dire comme dans IE9) serait appréciée.
  • Donc, vous voulez arrêter temporairement le courant de la propagation de l'évènement jusqu'à ce que la propagation d'un événement précédent est terminé. Je ne pense pas que cela peut être fait. Vous pouvez faire ceci: permet d'annuler l'événement, puis le feu une autre lors de la manifestation précédente a fini de se propager.
  • J'ai seulement entendu dire IE9 essaie d'utiliser un dédié de base pour la compilation, rien au sujet de l'exécution en parallèle, pouvez-vous citer une source?
  • JavaScript est mono-thread en dehors de des web workers. Web les travailleurs ne devrait pas exiger un verrouillage de la solution à mettre en place.
  • Chakra moteur interprète, compile et exécute le code en parallèle et profite de plusieurs cœurs de PROCESSEUR, lorsqu'il est disponible." -- msdn.microsoft.com/en-us/ie/ff468705.aspx
  • Que peut signifier, comme vous le suggérez, parallèle au moteur de rendu, plutôt que parallèle à lui-même.
  • Connexes: stackoverflow.com/questions/6266868/...

InformationsquelleAutor smartcaveman | 2011-03-17