Ich arbeite an einem Skript mit einem Dialogfeld in Photoshop. Ziel ist es, ein Enddatum und eine Endzeit für mehrere Banner zu erhalten.
Meine Abbrechen-Schaltfläche funktioniert gut, aber meine Ok-Schaltfläche erzeugt einen seltsamen Fehler. Das Fenster scheint sich zu schließen, verschwindet aber einfach. Da es sich um ein Dialogfeld handelt, bleibt Photoshop eingefroren, während es darauf wartet, dass das Dialogfeld geschlossen wird. CMD+Tab zeigt das Fenster an, in das ich klicken kann. Danach - die OK-Schaltfläche schließt das Fenster nicht (der Rest des Codes innerhalb des Rückrufs wird immer noch aufgerufen), aber die Abbrechen-Schaltfläche schließt das Fenster einwandfrei.
(Video, das den Fehler zeigt: https://drive.google.com/open?id=12W6J15ap52xq1jKbVPt2-XeyIxumx6Qd )
Meine Callback-Funktionen sind wie folgt:
var cancelled = false;
dateWin.onClose = function(){
return cancelled;
}
dateBtnCancel.onClick = function(){
cancelled = true;
return dateWin.close();
}
dateBtnOK.onClick = function(){
cancelled = false;
return dateWin.close();
}
dateWin.show();
alert(cancelled);
Jede mögliche Unterstützung oder Vorschläge würden geschätzt. Danke schön!
UPDATE Das Deaktivieren meines OnClose-Rückrufs behebt dieses Problem - aber was noch wichtiger ist, ich weiß nicht, warum dies das Problem behebt. Zu verstehen, was hier vor sich geht, kann mir helfen, in Zukunft nicht denselben Fehler zu machen. Wenn Sie also verstehen, warum der onClose-Callback dies verursacht hat, wäre ich für eine Erklärung auf jeden Fall dankbar.
Ich werde nicht beantworten, warum Sie genau dieses Verhalten erhalten (dies ist wahrscheinlich eine Frage für das Adobe-Skriptforum), aber wenn das Ziel all dessen ist, den cancelled
Status zu erhalten, würde ich vorschlagen, den Code in etwas wie das Folgende zu ändern:
var myUI = showUI();
alert(myUI);
function showUI()
{
var w = new Window("dialog", "Window Name"),
dateBtnCancel = w.add('button', undefined, 'Cancel'),
dateBtnOK = w.add('button', undefined, 'Ok');
dateBtnOK.onClick = function()
{
w.close(1)
};
var showWin = w.show();
if (showWin == 1)
{
return true
}
else
{
return false
}
w.close();
};
Wenn Sie ein Dialogfenster abbrechen/schließen, .show()
wird zurückgegeben 2
, sodass Sie Schaltflächen verwenden können, um ein Fenster mit einem bestimmten Argument zu schließen, .close(arg)
um alle benötigten Daten zu erhalten. In meinem Beispiel schließe ich einen Dialog, indem ich 1
auf die Schaltfläche OK klicke und später true zurückgebe, wenn er .show()
zurückgegeben wird1
Sergej Kritsky
cancelled
? Deinem Video nach zu urteilen brauchst du diese Komplexität nichtRyan Walker