Funciones/variables globales
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)
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?
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.
@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.
Issue #2968
Pregunta: intentando poner el sector 'Settings' bajo el estilo
https://github.com/artf/grapesjs/issues/1627 Creo que la pregunta está relacionada específicamente con esta línea, tengo el mismo problema....
Issue #3404
Problema con el Style Manager.
Hola @artf quiero ocultar y mostrar propiedades de estilo para un componente específico. Tras referenciar este problema https://github.com/...
Issue #1422
[BUG] Propiedad sin control deslizante de unidades
Hola @artf, como ya se mencionó en este ticket = > creo que esta mejora específica rompió el comportamiento de propiedades sin unidades, co...
Issue #768
Problema con el navegador IE
Hola @artf, Creó este problema debido a https://github.com/artf/grapesjs/issues/214 ha sido cerrado... Cloné el último repositorio y lo eje...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
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 →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.