Considérez ce qui suit après script Effets:Après gestionnaire d'événements Effets se termine à la mi-exécution
var window = new Window('dialog');
var edit1 = window.add('EditText { characters: 20, active: true }');
var edit2 = window.add('EditText { characters: 20 }');
edit1.onChange = edit2.onChange = function() {
for (var i = 1; i <= 100; i++) {
$.writeln(i);
}
}
window.show();
correctement les œuvres suivantes: Le script crée une boîte de dialogue modale avec deux champs de saisie de texte. Chaque fois que je modifie le texte dans l'un des champs, puis le laisser (via l'onglet), le gestionnaire onChange
est exécuté et imprime les numéros 1..100 à la console. Notez que onChange
n'est levé que lorsqu'un champ de texte modifié perd son focus, et non immédiatement après chaque coup de clé.
Voici le problème: Si je modifie l'un des champs de texte, appuyez immédiatement sur la touche Échap, la boîte de dialogue se ferme. Lors de la fermeture, le champ de texte perd le focus, ainsi son gestionnaire onChange
est exécuté. Cependant, son exécution se termine après quelques instructions. Il parvient généralement à imprimer les nombres 1..7 ou 1..10, puis s'arrête juste et le débogueur me dit que l'exécution du script est terminée. Je suppose qu'il s'agit d'une sorte de problème de récupération de place: une fois que la fenêtre disparaît, elle obtient GC'd, avec ses gestionnaires d'événements en cours d'exécution. Comment puis-je empêcher After Effects de terminer silencieusement mon gestionnaire d'événements?
J'ai trouvé une solution de contournement: En vous inscrivant à OnChanging plutôt que onChange, j'averti immédiatement pour chaque touche, donc au moment où l'utilisateur presse Esc pour fermer la fenêtre, il n'y a plus rien à faire. Pas ma solution préférée, mais ça marche pour moi. –