Error de interfaz de usuario de script extraño

Estoy trabajando en un guión con un cuadro de diálogo en Photoshop. El objetivo es obtener una fecha y hora de finalización para varios banners.

Mi botón Cancelar funciona bien, pero mi botón Aceptar produce un error extraño. La ventana parece cerrarse, pero simplemente desaparece. Dado que es un cuadro de diálogo, Photoshop permanece congelado mientras espera que se cierre el cuadro de diálogo. CMD+Tab revela la ventana en la que puedo hacer clic. Después de eso, el botón Aceptar no cierra la ventana (el resto del código dentro de la devolución de llamada aún se llama), pero el botón Cancelar cierra bien la ventana.

(Video que muestra el error: https://drive.google.com/open?id=12W6J15ap52xq1jKbVPt2-XeyIxumx6Qd )

Mis funciones de devolución de llamada son las siguientes:

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

Cualquier ayuda o sugerencia sería apreciada. ¡Gracias!

ACTUALIZAR Deshabilitar mi devolución de llamada onClose soluciona este problema, pero lo que es más importante, no sé por qué esto soluciona el problema. Comprender lo que está sucediendo aquí puede ayudarme a no cometer el mismo error en el futuro, por lo que si comprende por qué la devolución de llamada onClose causó esto, definitivamente apreciaría la explicación.

Solo por curiosidad, ¿por qué necesitas una estructura como esa? ¿ Dónde devuelves tu cancelled? A juzgar por tu video, no necesitas esa complejidad.
En el ejemplo anterior, utilicé un booleano como mínimo debido a un error que estaba teniendo. Pero a veces devuelvo un objeto que contiene un booleano cancelado junto con otros datos de la ventana. La devolución de llamada win.onClose() básicamente guarda los datos y los devuelve a la función en un objeto conveniente.

Respuestas (1)

No responderé por qué obtiene exactamente este comportamiento (esta es probablemente una pregunta para el foro de secuencias de comandos de Adobe), sin embargo, si el objetivo de todo esto es obtener el estado, cancelledsugeriría cambiar el código a algo como esto:

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

cuando está cancelando/cerrando una ventana de diálogo, .show()regresa 2, por lo que puede usar botones para cerrar una ventana con un argumento específico .close(arg)para obtener todos los datos que necesita. En mi ejemplo, estoy cerrando un diálogo 1haciendo clic en el botón Aceptar y luego devuelvo verdadero si .show()se devuelve1