Actualización de vista recursiva de un componente personalizado
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)
Vale. He encontrado una solución alternativa. y como esta pregunta es demasiado específica, cierro el asunto. Gracias por el apoyo.
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...
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.
Issue #2549
[PREGUNTA] Actualizar vista de componentes al cambiar la propiedad
Hola a todos, Estoy intentando crear un componente que actualice su vista en función del valor de una propiedad '''javascript editor. DomCo...
Issue #2103
[PREGUNTA] Problema de arrastre de componentes personalizados
Así es como he creado un componente personalizado: Este es mi bloque personalizado: El caso es que he envolvido la etiqueta de imagen dentr...
Issue #2839
[Pregunta] Añadí un componente llamado plantilla en los bloques, pero cuando intento arrastrar otros componentes dentro de ese componente plantilla, se arrastra, pero tras guardarlo elimina todos los componentes que hay dentro. ¿Cómo evitar esto?
Este es el código del componente de plantilla: '''js exportar default { init(editor) { editor. DomComponents.addType('myTemplate', { isComp...
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:...
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.