Los rasgos personalizados no se cargan dentro de un bloque personalizado
Tu componente tiene 'componentes' internos, así que si eliges uno de ellos, verás rasgos de esos componentes, no 'bloque de eventos'. Si seleccionas correctamente 'bloque de evento', verás tus rasgos. <img width="856" alt="Image" src="https://github.com/user-attachments/assets/a0913237-02f9-44f8-af51-6d151b618a37" />...
Lee la respuesta completa abajo ↓Pregunta
Versión GrapesJS
- Confirmo que uso la última versión de GrapesJS
¿Qué navegador usas?
Versión 133.0.6943.98
Enlace de demo reproducible
https://codesandbox.io/p/sandbox/loving-breeze-mdls43?file=%2Findex.js%3A77%2C6
Describe el bicho
Estoy intentando añadir algunos triats personalizados a mi bloque. Por desgracia, solo puedo ver los triats predeterminados [id,title]. Mi bloque tiene pocos códigos html, pero si elimino todo el código HTML y pongo solo una cadena como hellow world, sin ningún HTML en la propiedad de componente, los triats se mostrarán
'''js
Componentes: ' <h2 class="text-2xl font-bold text-gray-800" data-event-title> Nombre del evento </h2> <p class="text-gray-600 mt-2"> Fecha de inicio: <span data-evento-inicio>YYYY-MM-DD</span> </p> <p class="text-gray-600"> Fecha de finalización: <span datos-evento-fin>YYYY-MM-DD</span> </p> ', cuando hacen esto, los rasgos no llegan
pero
Componentes: ' Hola mundo `, Si pongo así, todos mis triats vendrán
Este es todo mi código de bloque
const myEventBlockPlugin = (editor, options = {}) => { editor. Components.addType("bloque-evento", { modelo: { Predeterminados: { etiquetaNombre: "div", Arrastrable: Cierto, Droppable: falso, atributos: { clase: "p-4 BG-Sombra blanca-LG redondeada-lg Text-Center" }, Componentes: ' <h2 class="text-2xl font-bold text-gray-800" data-event-title> Nombre del evento </h2> <p class="text-gray-600 mt-2"> Fecha de inicio: <span data-evento-inicio>YYYY-MM-DD</span> </p> <p class="text-gray-600"> Fecha de finalización: <span datos-evento-fin>YYYY-MM-DD</span> </p> `, Rasgos: [ { Nombre: "Evento-Título", etiqueta: "Nombre del evento", Tipo: "texto", cambioProp: cierto, }, { Nombre: "Inicio del evento", etiqueta: "Fecha de inicio", Tipo: "fecha", cambioProp: cierto, }, { Nombre: "Final-Evento", etiqueta: "Fecha de Finalización", Tipo: "fecha", cambioProp: cierto, }, ], Utilería: { "título del evento": "Nombre del evento", "inicio del evento": "AAAAAAAAAAAAAAAA", "final del evento": "YYYY-MM-DD", }, },
init() { this.on("change:evento-título", this.updateTitle); this.on("change:event-start", this.updateStartDate); this.on("change:event-end", this.updateEndDate); },
updateTitle() { const title = this.get("evento-título"); this.view.el.querySelector("[data-evento-título]").innerText = título; },
updateStartDate() { const startDate = this.get("evento-start"); this.view.el.querySelector("[data-event-start]").innerText = inicioFecha; },
updateEndDate() { const endDate = this.get("evento-fin"); this.view.el.querySelector("[data-evento-fin]").innerTexto = finFecha; }, }, });
editor. Blocks.add("evento-bloque", { etiqueta: "Event Block", Contenido: { Tipo: "Bloque de eventos" }, categoría: "Básico", }); };
### Código de conducta
- [x] Acepto seguir el Código de Conducta de este proyecto
Respuestas (2)
Tu componente tiene 'componentes' internos, así que si eliges uno de ellos, verás rasgos de esos componentes, no 'bloque de eventos'. Si seleccionas correctamente 'bloque de evento', verás tus rasgos. <img width="856" alt="Image" src="https://github.com/user-attachments/assets/a0913237-02f9-44f8-af51-6d151b618a37" />
Y para que lo sepas, esto '''js this.view.el.querySelector("[data-evento-fin]").innerTexto = finFecha;
solo actualiza la vista del componente, por lo que no afecta al código HTML de exportación.
Gracias por informar de esto, @gopukinapp.
El problema con Los rasgos personalizados no se cargan dentro de un bloque personalizado parece ser una condición de carrera o un problema de sincronización de gestión de estado. Esto suele ocurrir cuando los eventos del ciclo de vida de los componentes y las modificaciones del DOM se superponen, creando un estado inconsistente.
Qué probar:
- Añadir un envoltorio setTimeout para asegurar que el DOM se ha asentado: '''javascript setTimeout(() => { Tu operación aquí }, 0);
2. **Comprobar el orden de inicialización** — asegúrate de que los componentes estén completamente cargados antes de interactuar con ellos
3. **Utilizar el sistema de eventos del editor** — escuchar los eventos de finalización:
'''javascript
editor.on('component:mount', (component) => {
Es seguro interactuar con el componente aquí
});
Recomendaciones de siguientes pasos:
- Prueba con la última versión de GrapesJS si no lo has hecho
- Proporcionar un ejemplo mínimo reproducible (CodeSandbox) — esto ayuda al equipo a identificar la causa raíz más rápido
- Incluir errores de GrapesJS, de navegador y de consola en tu informe
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #4191
Estamos intentando almacenar los datos del editor grapesJS en la aplicación Angular 10, obteniendo un error CORS, imagen adjunta abajo
Versión GrapesJS [x] Confirmo que uso la última versión de GrapesJS ¿Qué navegador usas? Chrome 99.0.4844.5 Enlace de demo reproducible htt...
Issue #4145
0.18.3 edición de texto no se activa para los componentes de texto > enlace
Versión GrapesJS [x] Confirmo que uso la última versión de GrapesJS ¿Qué navegador usas? Chrome 99 Enlace de demo reproducible https://code...
Issue #6659
Estilos de símbolos no sincronizados
Versión GrapesJS [x] Confirmo que uso la última versión de GrapesJS ¿Qué navegador usas? Firefox 145.0 (64 bits) Enlace de demo reproducibl...
Issue #6152
El CSS añadido mediante código personalizado persiste después de que se elimina un componente de código personalizado
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Cualquiera Enlace de demo reproducible ht...
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
Ship to Production Faster: What’s New in GrapesJS Shadcn
Supercharge your page builder! GrapesJS Shadcn adds live drag previews, rich text / commands, dynamic data, and canvas presets to ship to prod faster.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
Embed GrapesJS in Your SaaS: A Weekend Guide
Embed GrapesJS in your SaaS and ship a white-label page builder over a weekend. Honest tradeoffs, real code, and the plugins that close the UX gap.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.