After Effects事件处理程序在执行中期终止

时间:2017-06-14 09:11:54

标签: javascript extendscript after-effects

考虑以下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保持静默终止我的事件处理程序?

1 个答案:

答案 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();
}