无法使用扩展脚本从列表框中删除Mutiple Comp

问题描述 投票:0回答:1

尽管我使列表框变为多选,为什么我不能从列表框中执行多个删除任务?我需要你的帮助 。您可以在此处看到完整的脚本。

(function(){
   $.win = new Window("palette");
    var win = $.win;
    win.orientation = "column";
    win.alignChildren = ["center", "top"];
    win.spacing = 10;
    win.margins = 16;
    var listbox1 = win.add("listbox", undefined, undefined, { name: "listbox1", multiselect: true, columnTitles: "Max", showHeaders: true });
    listbox1.preferredSize.width = 136;
    listbox1.preferredSize.height = 208;
    var button1 = win.add("button", undefined, undefined, { name: "button1" });
    button1.text = "Search";
    var button2 = win.add("button", undefined, undefined, { name: "button2" });
    button2.text = "Delete";
    win.show();
    var myNewArray = [];
    button1.onClick = function Search() {
        var compsArray = new Array();
        var myProj = app.project;
        myNewArray = [];
        listbox1.removeAll();
        for (var i = 1; i <= myProj.numItems; i++) {
            if (myProj.item(i) instanceof CompItem) {
                myNewArray = compsArray[compsArray.length] = myProj.item(i);
                listbox1.add("item", myNewArray.name);
            }
        }
    }
    button2.onClick = function deletecomps() {  


for (var s = 1; s <= app.project.numItems; s ++) {
    if ((app.project.item(s) instanceof CompItem) && (app.project.item(s).name.match(listbox1.selection)))  {
        myComp = app.project.item(s);
        break;
        }
    }
       app.project.item(s).remove ();
    }
})();

You can see an image to clarify the script in AE

extendscript
1个回答
0
投票

您的问题是第34行的listbox1.selection

if ((app.project.item(s) instanceof CompItem) && (app.project.item(s).name.match(listbox1.selection)))  {

是一个数组,您正尝试将其与app.project.item(s).name返回的字符串进行匹配,而该字符串永远不会匹配。

此外,您要达到的目标是什么

myComp = app.project.item(s);
break;

这里是onClick函数,但是可以。它将循环进行选择,并根据与组件名称匹配的列表框文本查找匹配的项目项。这很危险,因为相同的补偿名称会产生误报。我强烈建议您不要在生产代码中使用此技术,因为它肯定会给您的用户带来问题。

另外,我会将您将列表填充的部分变成单独的函数,并在单击删除后调用它,以便刷新列表,因为即使在删除伴奏之后,列表仍保持不变。 。

button2.onClick = function deletecomps() {  
        for (var b= 0; b < listbox1.selection.length; b++){  
            for (var s = 1; s <= app.project.numItems; s ++) {
                if ((app.project.item(s) instanceof CompItem) && (app.project.item(s).name.match(listbox1.selection[b].text)))  {
                    app.project.item(s).remove ();
                }
            }
        }            
    }
© www.soinside.com 2019 - 2024. All rights reserved.