Issue #3496💬 RespondidoAbierto el 28 de mayo de 2021por anlumoReacciones 1

HAZAÑA: Marcar el componente como Sucio

Respuesta rápidapor anlumo1

Solucioné esto desactivando completamente el manejo onbeforeunload y creando el mío propio.

Lee la respuesta completa abajo ↓

Pregunta

¿Qué intentas añadir a GrapesJS?

El componente debería poder marcarse como sucio, activando el mensaje de advertencia 'onbeforeunload'.

Describe tu solicitud de función detallado

Tengo un componente de texto (personalizado) donde el usuario puede introducir texto arbitrario. Estoy almacenando los datos en mi servidor y quiero guardarlos automáticamente. Sin embargo, no quiero que contacten al servidor por cada carácter añadido al componente de texto, ya que sería una gran avalancha con la cantidad de usuarios que tenemos.

Tampoco quiero cambiar el 'stepsBeforeSave', porque cambios grandes como arrastrar componentes deberían guardarse inmediatamente.

Actualmente, el componente almacena los datos (establece la tecla 'contenido' en el modelo) cuando el usuario sale del componente de texto. Esto funciona, pero cuando el usuario recarga la página mientras el componente de texto sigue enfocado, los cambios más recientes no se aplican al modelo de datos.

Esto estaría bien, pero me gustaría abrir el cuadro de advertencia de guardado (el mensaje 'onbeforeunload'). Sin embargo, esto no es posible ya que grapesjs no conoce los cambios pendientes, por lo que no lo habilita:

https://github.com/artf/grapesjs/blob/88249c38577852dc3c42047356a70a12066ee6ca/src/editor/model/Editor.js#L183-L196

No puedo simplemente incrementar el 'changesCount' para activar el diálogo, ya que esto activaría una partida guardada (que no quiero).

Sería bueno que un componente pudiera declararse sucio (con cambios sin guardar).

¿Hay alguna alternativa en la última versión?

  • Sí (describe la alternativa)
  • No

Puedo poner 'noticeOnUnload' a 'false' en la configuración del editor y hacerlo manualmente. Esto me funciona porque 'stepsBeforeSave' es '1' de todas formas, pero no funcionaría para ningún otro valor.

¿Está relacionado con algún problema?

  • Sí (Da un enlace al número)
  • No

Respuestas (4)

anlumo23 de julio de 2021

Solucioné esto desactivando completamente el manejo onbeforeunload y creando el mío propio.

artf31 de mayo de 2021

El editor tiene la propiedad 'editar' que cambia cada vez que el RTE está activado o desactivado, así que supongo que, en tu caso, esto debería funcionar '''js editor.on('change:editing', (em, editing) => { window.onbeforeunload = edición || editor.getDirtyCount() ? e = > 1 : nulo; });

anlumo31 de mayo de 2021

¿No se sobrescribiría este manejador onbeforeunload después por el fragmento que mencioné antes?

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @anlumo.

¡Gran sugerencia sobre FEAT: ¡Marcar Componente como Sucio! Aunque esta función específica aún no está en la API principal, existen varias formas de lograr un comportamiento similar.

Usando el sistema de eventos: '''javascript editor.on('component:update', (component) => { Tu lógica aquí });


**Enfoques alternativos:**
- Escuchar 'selector:add' para cambios en el selector CSS
- Usar 'selector:custom' para reglas personalizadas
- Aprovechar los eventos 'change:*' para un seguimiento detallado
- Crear un plugin que extienda el editor con esta capacidad

**Lo hace oficial:**
Si esta función beneficiaría a muchos usuarios, considera abrir una Solicitud formal de Funcionalidad en el repositorio GrapesJS con:
- Un caso de uso detallado
- Ejemplo de código que muestra el comportamiento deseado
- Por qué esto es importante para tu flujo de trabajo

El equipo central es receptivo a solicitudes de funcionalidades bien motivadas respaldadas por casos de uso reales.

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 →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

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