HAZAÑA: Marcar el componente como Sucio
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:
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)
Solucioné esto desactivando completamente el manejo onbeforeunload y creando el mío propio.
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; });
¿No se sobrescribiría este manejador onbeforeunload después por el fragmento que mencioné antes?
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.
Issue #3128
HAZAÑA: Soltar un componente en la posición en que se hace clic
¿Qué intentas añadir a GrapesJS? Cuando se deja caer un componente, mantente en la posición en la que se hace clic con el ratón. Describe t...
Issue #3731
El elemento de texto no puede seleccionarse dos veces después de extenderse con eventos
Versión: 0.17.25 ¿Puedes reproducir el error de la demo?[ ] Sí[x] No ¿Cuál es el comportamiento esperado? Actualiza un componente existente...
Issue #3193
LOGRO: Cambio del almacenamiento interno actual de objetos para permitir mapeos de relaciones en lugar de la implementación actual de contenedor indexable
¿Qué intentas añadir a GrapesJS? Actualmente, las instancias de editor recién instanciadas se añaden a una colección indexable donde el usu...
Issue #3608
HAZAÑA: Desactivar el arrastre
¿Qué intentas añadir a GrapesJS? He implementado un componente alternativo de edición de texto (no basado en RTE). Quiero que la gente pued...
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 →Tutoriales relacionados
Guías detalladas sobre el mismo tema.
Tutorial
Super Tooltip for GrapesJS — Version 0.1.5 Released 🎉
We’re excited to announce the v 0.1.5 update of Super Tooltip, our floating‑menu and tooltip plugin for GrapesJS
Tutorial
GrapesJS in 2026: The Complete Guide to the Open-Source Web Builder Framework
Master GrapesJS in 2026. Architecture, code examples, React integration, plugin development, Studio SDK, and how it compares to other projects
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.