Issue #1912💬 RespondidoAbierto el 21 de marzo de 2019por simplecommerceReacciones 0

Componentes personalizados hijos por defecto

Respuesta rápidapor artf

@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)

lock[bot]27 de marzo de 2020

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.

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.