Issue #2614💬 RespondidoAbierto el 2 de marzo de 2020por makbariReacciones 1

Actualización de vista recursiva de un componente personalizado

Respuesta rápidapor makbari1

Vale. He encontrado una solución alternativa. y como esta pregunta es demasiado específica, cierro el asunto. Gracias por el apoyo.

Lee la respuesta completa abajo ↓

Pregunta

Hola,

He definido un tipo personalizado como: '''javascript editor. DomComponents.addType('customType', { modelo: { Predeterminados: { tipo: 'customType', etiquetaNombre: 'customTag', Textible: 1, Arrastrable: Cierto, arrastrable: ['P', 'Div', 'Span'] }, }, isComponent(el: HTMLElement) { Sea resultado; etiqueta const = el.etiquetaNombre;

if (tag == 'CUSTOMTAG') { resultado = { tipo: 'customType', etiquetaNombre: etiqueta.toLowerCase(), }; } resultado de retorno; }, Vista: { async onRender(elem: any) { sea elemento: HTMLElement = elem.el; await this.getContent(element); }, async getContent(element: HTMLElement) { let path = element.getAttribute('href'); si (camino) { res = await apiCall.loadData(path); } res.result contiene html. También puede contener un elemento cutomTag en su interior. element.innerHTML = res.result; element.style.display = 'bloque'; } }, });


Quiero mantener la 'customTag' en mi modelo y mostrar el contenido (HTML) en la vista. 
Sin embargo, en el contenido, es posible tener la misma 'etiqueta personalizada' con diferentes href y contenidos.

En el renderizado visual, Grapesjs no recibe este tipo de trigger para el customTag anidado (lo cual entiendo por qué). 

¿Hay alguna mejor manera de configurar la vista del componente para que, si hay 'customTag' dentro del contenido, se procese como 'customType'?

¿Es posible tener componentes recursivos como este cuando solo se actualiza la vista?

Gracias

Respuestas (3)

makbari4 de marzo de 2020

Vale. He encontrado una solución alternativa. y como esta pregunta es demasiado específica, cierro el asunto. Gracias por el apoyo.

artf3 de marzo de 2020

Si haces esto de 'element.innerHTML = res.result'; simplemente colocas el contenido como estático, el editor no lo analiza a componentes, probablemente lo que buscas es actualizar el modelo 'model.components(res.result)' Recomendaría leer con más atención a cómo funcionan componentes, parece que aún no te queda claro la diferencia entre el modelo y la vista...

makbari3 de marzo de 2020

Gracias por la respuesta. El objetivo es mantener el modelo como '<customTag></customTag>' y simplemente renderizar el contenido como estático. Sin embargo, no encontré la forma de reaccionar al contenido estático al renderizar. Por eso quiero mantener el modelo y la vista separados para tener 'customTag' en el código fuente.

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 →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.