Pérdida de la información del componente al guardar el código desde el Editor de Código
@jenter comentario #1331 y comentario #2644 son buenos ejemplos. También echa un vistazo a comentario #2664, ¡que es un escollo que hay que evitar! ¡Salud!
Lee la respuesta completa abajo ↓Pregunta
He integrado la opción de edición de código en el Web Builder.
-
Usar 'editor.getHtml()' para obtener el contenido HTML actual y poblarlo en el editor de código
-
Mientras guardo el código desde el editor de código, uso 'editor.setComponents()' para establecer el contenido editado en el lienzo del constructor.
Problemas
- Al guardar el html desde el editor de código, pierde toda la información antigua relacionada con los componentes y actúa como un nuevo componente con valores predeterminados en los rasgos.
- 'data-gjs-type' se convierte en predeterminado y no reconoce los componentes personalizados.
Análisis y pensamientos Al comprobarlo, parece,
- Cuando usamos 'editor.getHtml()' da el HTML final sin ningún atributo 'data-gjs-*'.
- el método 'editor.setComponents()' parece anular la información antigua de componentes.
Preguntas
- Para conservar toda la información de los componentes antiguos y usarla después de editar el HTML en el editor, ¿cómo podemos hacerlo?
- Si es usando 'editor.getComponents()', ¿cómo podemos almacenar y reutilizar después de guardar el contenido del editor de código? ! set_content ! save_content
Respuestas (3)
@jenter comentario #1331 y comentario #2644 son buenos ejemplos. También echa un vistazo a comentario #2664, ¡que es un escollo que hay que evitar! ¡Salud!
@sathyanarayananaCES Primero, para repetir a otros, lo mejor es usar 'get/setComponents' y 'get/setStyle' para guardar el contenido del editor. Si he entendido bien tu uso, quieres HTML para 'htmlCodeEditor' y poder importar de nuevo al 'editor' después de la edición del usuario. Echa un vistazo a la demo de la importación del editor que simplemente llama a 'setComponents' con HTML en bruto. Árbitros - https://github.com/artf/grapesjs/blob/dev/docs/api/editor.md#examples y https://github.com/artf/grapesjs/blob/dev/test/specs/grapesjs/index.js#L180
Para hacer lo que quieres tendrás que llamar a 'editor.genHtml()' para el 'htmlCodeViewer.setContent' y import de nuevo con 'editor.setComponents' usando el HTML en bruto de 'htmlCodeViewer' en lugar de lidiar con el array de componentes. El problema que tienes que entender es que, internamente, grapejs intenta procesar ese HTML en bruto en un array de componentes. Analizar HTML es difícil incluso con HTML válido. Por lo tanto, obtendrás resultados inesperados y podrías perder datos que Grapejs no pueda analizar. Por eso todo el mundo sugiere usar 'getComponents' y 'getStyle' si alguna vez quieres almacenarlo y cargarlo de nuevo. Espero que eso ayude a aclarar por qué estás perdiendo datos. Es porque estás usando el análisis HTML de import/grapesjs.
Hola @sathyanarayananaCES debes llamar a ''editor.getComponents'' y ''editor.getStyle'' para recuperar los detalles de los componentes; luego puedes volver al estado almacenado llamando a ''editor.setComponents'' y ''editor.setStyle'' con el resultado de las llamadas a funciones mencionadas anteriormente. ¡Salud!
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #1255
[PREGUNTA]: ¿Cómo configurar el contenido html del editor a partir de un componente personalizado?
Estoy teniendo problemas para que un bloque+componente personalizado muestre su plantilla HTML dentro del editor de uvas. Dentro del HTML e...
Issue #3347
¿Cómo puedo conseguir código JS sin comprimir para editarlo?
Hola, gracias por revisar mi problema. Quiero usar mi propio JSEditor para editar html, css y js. Primero, uso 'getHtml', 'getCss', 'getJs'...
Issue #3266
[Pregunta] ¿Cómo saber de qué bloque se genera el componente seleccionado?
Me pregunto cómo hacer una búsqueda inversa, desde el componente hasta el bloque. Uso add() del Gestor de bloques para añadir un bloque com...
Issue #1616
grapesjs editor.gethtml() no funciona en Edge Explorer
En mi proyecto estoy usando este código para obtener el html del editor grapesjs: 'var html = window.frames[0].editor.getHtml();' Mi editor...
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.