Issue #2181💬 RespondidoAbierto el 4 de agosto de 2019por pouyamiralayiReacciones 2

Funciones/variables globales

Respuesta rápidapor artf1

Perdón @pouyamiralayi pero creo que no has captado el significado total de la propiedad 'script' en Component (obviamente no eres el único, aunque intente explicar esta "paradoja del script" aquí) Lo que se pregunta en el #1691 simplemente NO TIENE SENTIDO porque el contexto en la propiedad 'script' es como OTRO MUNDO...

Lee la respuesta completa abajo ↓

Pregunta

¡Hola! Recientemente he notado este problema. Creo que sería beneficioso tener esta función. En contraste con el enfoque sugerido por @artf que utiliza scripts canvas como forma de inyectar globalmente, creo que esto no es funcional para el propósito principal para el que está pensada esta función. En mi opinión, el principal caso de uso para tener variables y funciones globales es la forma en que se maneja el script dentro del lienzo: para cada tipo de componente, se ejecuta una función cada vez que se renderiza ese lienzo. Así que si registras algún tipo de manejadores para ciertos eventos en tu script, no hay forma de gestionar esos manejadores (por ejemplo, separándolos del evento) porque el contexto de ejecución se perdería cada vez que se renderiza el lienzo. Así que necesitamos que nuestros manejadores estén definidos en el ámbito global. La solución habitual para esto es la idea que se usa aquí Me encantaría saber de ti @artf sobre este asunto. Gracias de antemano.

Respuestas (3)

artf12 de agosto de 2019

Perdón @pouyamiralayi pero creo que no has captado el significado total de la propiedad 'script' en Component (obviamente no eres el único, aunque intente explicar esta "paradoja del script" aquí)

Lo que se pregunta en el #1691 simplemente NO TIENE SENTIDO porque el contexto en la propiedad 'script' es como OTRO MUNDO, la única forma de comunicarse con esos mundos es usando cadenas de interpolación (como se explica en la documentación) y de alguna manera es similar a lo que hace el plugin que mencionaste.

Intenta entender tomando el ejemplo del tema mencionado y mis comentarios. '''js /* main-components.js */ 'temp' y 'fnName', probablemente en el mismo contexto son requeridas/usadas por el editor GrapesJS var temp = {}; función fnName() {}

// ... aquí creo un componente/bloque bm.add("image-cropper", { //... customProp: 'valor personalizado', Propiedad de script para el componente/bloque script: función () { Aquí estoy, en otro contexto Esta parte podría ser la que se almacena en la base de datos y luego se imprime en el usuario final en alguna 'página principal'. Aquí, nadie conoce el editor de GrapesJS, ni 'temp' ni 'fnName' console.log(temporal, fnName); ambos son indefinidos

La única forma de "imprimir" algo del modelo es usar interpolación console.log('{[ customProp ]}'); imprimirá 'valor personalizado'

Pero esto funciona SOLO porque antes de almacenar la cadena el editor lo reemplaza por la propiedad, así que en la base de datos almacenará: console.log('valor personalizado'); },


¿Está claro ahora mismo?
pouyamiralayi15 de agosto de 2019

Gracias por tu amable respuesta @artf. Después de esforzarme con la idea, estoy llegando al punto en que lo que dices es totalmente razonable. Fue muy ingenuo por mi parte sacar este tema otra vez, perdón por eso. La solución temporal actual es completamente correcta y complementa los scripts globales de Canvas. Y para quienes intentan implementar un canal de comunicación entre scripts globales y locales, pueden definir un bus de eventos globalmente y conectar o separar oyentes localmente. El estado también se guarda mediante la interpolación de los valores del modelo. Gracias de antemano.

collindutter20 de enero de 2021

@pouyamiralayi te importaría dar más información sobre cómo creasteis un bus de eventos global para enviar mensajes entre scripts globales y locales? El editor incrusta el contenido grapesjs en un iframe, así que no puedes usar un objeto ventana global como bus de eventos.

¡Gracias!

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.

Explora plugins gratuitos →
Opción premium

Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.

Explora plugins premium →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.