考虑以下After Effects脚本:
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();
以下工作正常:该脚本创建一个带有两个文本输入字段的模式对话框。每当我编辑任一字段中的文本,然后保留它(通过选项卡),执行onChange
处理程序并将数字1..100打印到控制台。请注意,onChange
仅在修改后的文本字段失去焦点时才会引发,而不是在每次击键后立即引发。
以下是问题:如果我编辑其中一个文本字段,则立即按Esc键,对话框将关闭。关闭时,文本字段失去焦点,因此其onChange
处理程序将被执行。但是,只需几条指令即可终止执行。它通常设法打印数字1..7或1..10,然后停止,调试器告诉我脚本执行完成。
我的猜测是,这是某种垃圾收集问题:一旦窗口消失,它就会得到GC以及它的运行事件处理程序。
如何使After Effects保持静默终止我的事件处理程序?
答案 0 :(得分:0)
作为一种解决方法,您可以按如下方式设置OnClose事件:
function fnc(){
for (var i = 1; i <= 100; i++) {
$.writeln(i);
}
}
edit1.onChange = edit2.onChange = function(){
fnc();
}
window.onClose = function(){
edit1.onChange = edit2.onChange = null;
fnc();
}