Estoy trabajando en un complemento para Trumbowyg en el que intento almacenar una función en una variable para que se pueda llamar más tarde, pero también se pueda sobrescribir sin alterar el archivo javascript incluido.

El problema es que no se llama a la función cuando intento llamarla.

Aquí está mi código relevante:

init: function (trumbowyg) {
    
    var plugins = trumbowyg.o.plugins;

    ...
    
    if(!plugins.giphycrumbs.close_modal) {
        plugins.giphycrumbs.close_modal = function() {
            console.log('close modal');
            $(plugins.giphycrumbs.modal_selector).modal('hide');
        }
    }
    
    $(document).on('click', '.add_giphy', function() {
        trumbowyg.execCmd('insertImage', $(this).attr('src'), false, true);
        
        plugins.giphycrumbs.close_modal;
        
    });
    
    // If the plugin is a button
    trumbowyg.addBtnDef('giphycrumbs', {
            //this function is handled exactly the same way except it actually works
        fn: plugins.giphycrumbs.open_modal
    });
}

En mi código anterior, puede ver que estoy verificando si plugins.giphycrumbs.close_modal NO está configurado, y si eso es cierto, lo configuro en una función que se supone que cierra un modal.

En mi controlador de clics para .add_giphy, el código insertImage funciona, pero plugins.giphycrumbs.close_modal nunca se ejecuta (no obtengo el mensaje console.log incrustado en la función)

Si lo hago console.log(plugins.giphycrumbs.close_modal), la función esperada se coloca en la consola.

¿Por qué no se ejecuta la función close_modal en mi código?

0
GrumpyCrouton 20 jul. 2020 a las 21:11

1 respuesta

La mejor respuesta

Responder

Intente agregar paréntesis a close_modal dentro de su controlador de clics.

Explicación

Me parece que no está invocando (llamando) a esta función.

En su controlador de clics, hay esta línea plugins.giphycrumbs.close_modal;

En javascript, esta es una referencia a una propiedad en el objeto giphycrumbs. Aunque resulta ser una función, no se invocará como tal a menos que use paréntesis después de ella (y opcionalmente le dé algunos argumentos).

¡Espero que ayude! 👍

1
JuanCaicedo 20 jul. 2020 a las 18:17