Componentes personalizados hijos por defecto
@simplecommerce un ejemplo funcional de un componente personalizado con hijos por defecto (utiliza almacenamiento local) https://jsfiddle.net/t5yw48cs/ Intenta revisar la forma en que guardas o cargas las plantillas, quizá el problema esté ahí https://grapesjs.com/docs/modules/Storage.html#store-and-load-templates
Lee la respuesta completa abajo ↓Pregunta
Hola,
Estoy intentando entender cómo puedo lograr lo siguiente.
- Crear un componente con un contenido predeterminado como hijos.
- Crea un bloque para añadir ese componente al lienzo.
- Edita los hijos de componentes a cualquier otra cosa y guarda el resultado HTML.
- Recarga el componente en el editor más adelante y continúa editando.
Mi problema es el siguiente:
- He probado a usar 'componentes' y 'contenido' en los valores predeterminados.
- He intentado definir alguna lógica personalizada en la función 'init' de la vista de mi componente, para solo añadir el valor predeterminado si no existe ningún componente.
Ambos métodos no funcionan, funcionan al principio, pero si edito el texto, guardo los valores, cojo el HTML y lo reimporto o lo recargo en el lienzo usando la opción 'components' del editor, el valor predeterminado se inserta junto con el contenido editado (como hijos).
No entiendo por qué. También he notado que esta lógica solo funciona para componentes reales y no para nodos de texto, ya que comps.length no detecta nodos de texto como hijos.
Vista: {
init() {
const comps = this.model.components();
if (!comps.length) {
comps.add ('valor por defecto');
}
}
}
Solo pude solucionar mi problema haciendo lo siguiente:
Vista: {
onRender() {
if (!this.el.childNodes.length) this.el.innerHTML = 'Título del artículo';
}
}
El componente se ve así:
<div my-attribute="" data-gjs-type="article-title">Título del artículo</div>
Pero no creo que sea la mejor manera de hacerlo. Me preguntaba si alguien tiene sugerencias o puede contarme cómo lo hicieron.
¡Gracias!
Respuestas (2)
@simplecommerce un ejemplo funcional de un componente personalizado con hijos por defecto (utiliza almacenamiento local) https://jsfiddle.net/t5yw48cs/
Intenta revisar la forma en que guardas o cargas las plantillas, quizá el problema esté ahí https://grapesjs.com/docs/modules/Storage.html#store-and-load-templates
Este hilo se ha bloqueado automáticamente porque no ha habido actividad reciente desde que se cerró. Por favor, abre un nuevo problema para bugs relacionados.
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #1113
[PREGUNTAS] ¿El nuevo tipo de rasgo no funciona con los componentes renderizados?
Hola, gracias por el excelente marco. Estoy intentando aplicar esto a mi proyecto. Quiero añadir un nuevo rasgo para el componente existent...
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 #1030
[Pregunta] Eventos de disparo con componentes personalizados
Estoy intentando crear un plugin para Grapesjs con algunos componentes personalizados, y tengo problemas para activar eventos e interactuar...
Issue #951
[PREGUNTA] La selección de componentes personalizados no es posible desde el lienzo.
Hola, Intenté averiguarlo por mi cuenta, pero siento que estoy dando vueltas un poco en círculos. Así que espero que tengáis tiempo para le...
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.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.