Невозможно удалить Mutiple Comp из списка с помощью Extendscript - PullRequest
0 голосов
/ 03 апреля 2020

Я не могу выполнить несколько удалений из своего списка, хотя я сделал список отключенным Почему? Мне нужна ваша помощь . Вы можете увидеть полный сценарий там.

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

Вы можете увидеть изображение для пояснения сценария в AE

1 Ответ

0 голосов
/ 05 апреля 2020

Ваша проблема в том, что listbox1.selection в строке 34

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