如何在没有大字符串的情况下创建资源字符串?

How can I create the resource string without a big string?

在 After Effects 脚本中,如果您希望脚本能够停靠在程序的工作区中,据我所知,唯一的方法是使用这样的资源字符串:

var res = "Group{orientation:'column', alignment:['fill', 'fill'], alignChildren:['fill', 'fill'],\
    group1: Group{orientation:'column', alignment:['fill', ''], alignChildren:['fill', ''],\
        button1: Button{text: 'Button'},\
    },\
}";
                
myPanel.grp = myPanel.add(res);

上面的代码创建了一个脚本 UI,在组(“group1”)中有一个按钮(“button1”)。

我想知道创建相同资源字符串的其他方法。是否可以使用 JSON 对象然后将其字符串化?

我知道它可以以某种方式完成,因为我已经检查了可停靠的 Duik Bassel 脚本,例如,添加了如下元素:

var button1 = myPal.add( 'button' );

但是我自己搞不懂怎么做。

TL;DR: 我想制作一个可停靠的脚本UI,而不是一下子写一个巨大的字符串,而是一点一点地写,就像一个浮动脚本。

extendscript 仍然使用 javaScript 的 20 世纪版本,它没有内置 JSON,但我已经成功地使用了 JSON polyfill。

我用 json2.js to get structured data in and out of Illustrator, and it worked beautifully, but I can see there's now a json3.js which might be better for whatever reason. This Whosebug question 解决了差异。

要将另一个 .js 文件(例如 polyfill)加载到您的脚本中,您需要执行以下操作

var scriptsFolder = (new File($.fileName)).parent; //  hacky but effective
$.evalFile(scriptsFolder + "/lib/json2.js"); // load JSON polyfill

这些文件位置在其他 Adob​​e 应用程序中可能有所不同。不确定它在 AfterEffects 中会是什么。我似乎记得 InDesign 有一个不同的脚本位置。当然,您也可以对路径进行硬编码。

祝你好运!

UI 容器元素有一个 add() 方法,允许您向它们添加其他 UI 元素,您可以将它们视为普通对象。

var grp = myPanel.add("group");
grp.orientation = "column";
grp.alignment = ['fill', 'fill'];
grp.alignChildren = ['fill', 'fill'];

var group1 = grp.add("group");
…
var button1 = group1.add("button");
button1.text = 'Button'

此处有更多详细信息和示例:https://extendscript.docsforadobe.dev/user-interface-tools/types-of-controls.html#containers

还值得一试 https://scriptui.joonas.me/,这是一个可视化脚本UI 界面生成器。您必须对它生成的代码做一些工作才能获得 AE 面板,但这并不难。