2015-03-21 2 views
0

Работа над скриптом для InDesign Я нашел эту проблему: если я вызываю app.open() изнутри button.onclick(), она останавливается и ничего не происходит. Поскольку я начинаю с Javascript, я, вероятно, что-то делаю неправильно. Но если нет, как мне исправить? Я не могу найти альтернативы.app.open не отвечает, если вызван изнутри onclick()

Пожалуйста, только чистый Javascript.

Заранее спасибо.

Здесь рабочий код:

var book_info; 

if (app.books.length != 1) { 
    var theFile = File.openDialog ("Select the book file to open..."); 
    get_data(theFile); 
     alert(book_info.filePath + "\r" + book_info.name); 
} 

book_info.close(); 

    function get_data(data) { 
     app.open(data); 
     book_info = app.activeBook; 
      alert("INSIDE FUNCTION" + book_info.filePath + "\r" + book_info.name); 
     return data; 
    } 

и тут один не работает:

var book_info; 

var w1 = new Window ("dialog", "TEST"); 
    w1.minimumSize.height = 50; 
    w1.minimumSize.width = 50; 

var p1 = w1.add ("panel"); 
     sel_button = p1.add ("button", undefined, "Select book"); 

var g1 = w1.add ("group"); 
     g1.add("button", undefined, "Cancel"); 
     g1.add("button", undefined, "OK"); 

sel_button.onClick = function(){ 
    var theFile = File.openDialog ("Select the book file to open..."); 
    get_data(theFile); 
     alert(book_info.filePath + "\r" + book_info.name); 
    book_info.close(); 
}; 

w1.show(); 


function get_data(data) { 
    app.open(data); 
    book_info = app.activeBook; 
     alert("INSIDE FUNCTION" + book_info.filePath + "\r" + book_info.name); 
    return data; 
} 
+0

Он ничего не делает, он возвращает ошибку - «Не может обрабатывать запрос, потому что модальный диалог активен». Вы можете использовать w1.close() ;, но у вас будет такая же ошибка. Когда вы вызываете функцию, прикрепленную к окну, предполагается, что есть окно (даже если вы его закрываете) и остановите некоторые из функций. Раньше у меня была аналогичная проблема, и мне пришлось полностью сменить сценарий. –

+0

@ nicolai.kant Мне не возвращаются никакие ошибки, он просто останавливается. Не могли бы вы привести мне пример того, как мне изменить свой сценарий? На данный момент я понятия не имею. Спасибо. –

ответ

0

Существует альтернативный ответ на app.open not responding if called from inside onclick()

Он также предложил использовать 'палитры' окно вместо модального диалога

Попробуйте следующее:

var book_info;  
var theFile; 
var getData; 
var w1 = new Window ("dialog", "TEST");  
    w1.minimumSize.height = 50;  
    w1.minimumSize.width = 50;  
    var p1 = w1.add ("panel");  
     sel_button = p1.add ("button", undefined, "Open a book");  
    var g1 = w1.add ("group");  
     g1.add("button", undefined, "Cancel");  
     g1.add("button", undefined, "OK");  

sel_button.onClick = function(){  
    theFile = File.openDialog ("Select the book file to open...");  
    getData =1;   
    w1.close(1); 
};  

w1.show() 

if ( getData ==1) { 
    if (theFile) { 
    get_data(theFile);  
    } 
} 

function get_data(data) {  
    app.open(data);  
    book_info = app.activeBook;  
     alert("INSIDE FUNCTION" + book_info.filePath + "\r" + book_info.name);  
    return data;  
} 
+0

В моем случае лучшим решением является переход от «диалога» к «палитре». Это позволяет мне не вносить изменения в уже написанный код. Спасибо за помощь. –