Issue #2691✓ ResueltoAbierto el 31 de marzo de 2020por sathyanarayananaCESReacciones 8

Pérdida de la información del componente al guardar el código desde el Editor de Código

Respuesta rápidapor pouyamiralayi3

@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

  1. 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.
  2. 'data-gjs-type' se convierte en predeterminado y no reconoce los componentes personalizados.

Análisis y pensamientos Al comprobarlo, parece,

  1. Cuando usamos 'editor.getHtml()' da el HTML final sin ningún atributo 'data-gjs-*'.
  2. el método 'editor.setComponents()' parece anular la información antigua de componentes.

Preguntas

  1. 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?
  2. 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)

noogen5 de abril de 2020

@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.

pouyamiralayi31 de marzo de 2020

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.

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.