Los componentes en modal personalizado no son editables
Quizá usar el panel de 'capas' o desactivar el script usando un rasgo como se muestra en el número #2772
Lee la respuesta completa abajo ↓Pregunta
Hola, estoy intentando añadir un bloque modal personalizado a mi proyecto y quiero cambiar el contenido de este modal también con arrastrar y soltar. Aquí tienes el código de mi bloque modal: '''javascript editor. BlockManager.add("modal", { etiqueta: "Modal", categoría: "Básico", Contenido: { Contenido: ' <tipo de botón="botón" clase="modal-abierto-botón">Modal abierto</button> <div class="modal-wrapper"> <div class="modal-content"> <div class="modal-content__header"> <h3 class="modal-content__title">Encabezado modal</h3> <tipo de botón="botón" clase="modal-content__close-botón">×</button> </div> <p>Algo de texto en modal...</p> </div> </div> <style> .modal-wrapper { pantalla: ninguna; posición: fija; índice z: 100; Tapa de acolchado: 100px; izquierda: 0; arriba: 0; ancho: 100%; altura: 100%; desbordamiento: auto; color de fondo: RGBA (0,0,0,0,4); }
.modal-content { Color de fondo: #fefefe; margen: auto; relleno: 20px; borde: 1px sólido #888; ancho: 80%; }
.modal-content__header { posición: relativa; pantalla: flex; justificar-contenido: espacio-entre; Alinear-elementos: Arranque flexible; }
.modal-content__title { ancho: 100%; marje: 0; relleno: 0; }
.modal-content__close-button { color: #aaaaaa; relleno: 4px; tamaño de fuente: 24px; Peso-fuente: negrita; frontera: ninguna; Color de fondo: transparente; cursor: puntero; }
.modal-content__close-botón:pasa el cursor, .modal-content__close-button:focus { color: #000; } </style> `, script() { const button = this.querySelector(".modal-open-button"); const modalWrapper = this.querySelector(".modal-wrapper"); const modalCloseButton = this.querySelector( ".modal-content__close-button" );
button.addEventListener("click", () => { modalWrapper.style.display = "bloque"; });
modalCloseButton.addEventListener("click", () => { modalWrapper.style.display = "ninguno"; }); } } });
El problema de este código es que grapesjs envuelve todo el contenido con el envoltorio de div cuando el usuario lo deja en lienzo y todo lo que hay dentro de este div no es editable, seleccionable, droppable, etc. Aquí tienes el enlace para [demo](https://codesandbox.io/s/grapes-modal-block-067rq?file=/src/index.js).
Pasos para reproducirse:
1. Dejar caer bloque modal en el lienzo
2. Haz clic en el botón "Abrir modal"
3. Intenta editar o eliminar algo en contenido modal
Además, no puedo seleccionar el botón "Abrir modal" para cambiar su estilo o texto.
¿Puedes ayudarme con esto o quizá hay otro enfoque para implementar modales personalizados?
Necesito funcionalidad para abrirlo y cerrarlo y modificarlo.
Respuestas (3)
Quizá usar el panel de 'capas' o desactivar el script usando un rasgo como se muestra en el número #2772
Creo que el campo 'content' se trata como texto plano, así que usa el campo 'components' en su lugar:
'''js editor. BlockManager.add("modal", { etiqueta: "Modal", categoría: "Básico", Contenido: { Componentes: ' <tipo de botón="botón" clase="modal-abierto-botón">Modal abierto</button> <div class="modal-wrapper"> <div class="modal-content"> <div class="modal-content__header"> <h3 class="modal-content__title">Encabezado modal</h3> <tipo de botón="botón" clase="modal-content__close-botón">×</button> </div> <p>Algo de texto en modal...</p> </div> </div> <style> .modal-wrapper { pantalla: ninguna; posición: fija; índice z: 100; Tapa de acolchado: 100px; izquierda: 0; arriba: 0; ancho: 100%; altura: 100%; desbordamiento: auto; color de fondo: RGBA (0,0,0,0,4); }
.modal-content { Color de fondo: #fefefe; margen: auto; relleno: 20px; borde: 1px sólido #888; ancho: 80%; }
.modal-content__header { posición: relativa; pantalla: flex; justificar-contenido: espacio-entre; Alinear-elementos: Arranque flexible; }
.modal-content__title { ancho: 100%; marje: 0; relleno: 0; }
.modal-content__close-button { color: #aaaaaa; relleno: 4px; tamaño de fuente: 24px; Peso-fuente: negrita; frontera: ninguna; Color de fondo: transparente; cursor: puntero; }
.modal-content__close-botón:pasa el cursor, .modal-content__close-button:focus { color: #000; } </style> `, script() { const button = this.querySelector(".modal-open-button"); const modalWrapper = this.querySelector(".modal-wrapper"); const modalCloseButton = this.querySelector( ".modal-content__close-button" );
button.addEventListener("click", () => { modalWrapper.style.display = "bloque"; });
modalCloseButton.addEventListener("click", () => { modalWrapper.style.display = "ninguno"; }); } } });
@Ju99ernaut gracias por la gran sugerencia. Funcionó.
Pero ahora tengo otro problema: ¿cómo puedo seleccionar el botón "Abrir modal" para estilizar o modificar? Cuando hago clic en el botón "Abrir modal" se abre modal. ¿Puedo de alguna manera evitar que se active este evento? Aquí tienes demo
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #460
Cuando la vista del componente modifica el HTML, los componentes de texto ya no son editables
Estoy intentando crear un componente personalizado que contenga algo de texto lorem ipsum en el contenido, para editarlo una vez que esté e...
Issue #3309
Los Nodos de Texto interfieren al cambiar el contenido en un elemento
Versión: 0.16.44 Hola @artf Tengo un bloque personalizado con un componente de botón personalizado, cuyo contenido es similar al de este. `...
Issue #2697
[PREGUNTA] Problema con el tipo de componente personalizado y la celda de la tabla
¡Hola! Estoy intentando añadir un tipo de componente personalizado: '''javascript domc.addType('image-block', { extender: 'celda', modelo:...
Issue #2640
Añadir atributos extra con Stylemanager para cambiar el atributo del bloque seleccionado
Gracias por este plugin tan increíble. Lo estoy integrando con mi proyecto actual. Tengo un problema con ello. Aquí está mi código, he añad...
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.