Issue #2329💬 RespondidoAbierto el 15 de octubre de 2019por mustahsanmustafaReacciones 1

El lienzo elimina el renderizado de componentes tras el evento de cambio de valor de los rasgos

Respuesta rápidapor artf1

@mustahsanmustafa Creo que aquí hay algo que se está torciendo... '''js init() { this.listenTo(this, 'change:attributes', this.handleChange); this.handleChange(); }, handleChange() { valor const = JSON.stringify(this.getAttributes()); this.components('<app-body props='${value}'></app-body>'); Esta línea está causando...

Lee la respuesta completa abajo ↓

Pregunta

He creado componentes y bloques personalizados, pero cuando cambia el valor de los rasgos, el elemento renderizado se vuelve invisible desde el lienzo hasta que se recarga.

const DynamicBodyComponent = editor => {
    editor. DomComponents.addType('app-body', {
        isComponent: el => el.tagName === 'app-body',
        Vista: {
            onRender() { // usa el hook onRender en lugar de render
                const el = document.createElement("div");
                el.innerHTML = '
<div>Contenido dinámico de página (El contenido específico de la página se mostrará aquí...)</div>
<style>
 ';</style>
                this.el.appendChild(el);
            }
        },
        modelo: {
            Predeterminados: {
                Editable: Cierto,
                Droppable: Cierto,
                Rasgos: [
                    Las cadenas se convierten automáticamente en tipos de texto
                    {tipo: 'texto', nombre: 'buscaMarcaLugarMarcador', etiqueta: 'Buscar texto'}
                ],
                atributos: {
                    'buscaPlaceHolder': 'Busca en más de 1000 buenas ofertas de scrimming'
                }
                Como por defecto, los rasgos están ligados a los atributos, así que para definir
                Su valor inicial podemos usar atributos
            },
            init() {
                this.listenTo(this, 'change:attributes', this.handleChange);
                this.handleChange();
            },
            handleChange() {
                valor const = JSON.stringify(this.getAttributes());
                this.components('<app-body props='${value}'></app-body>'); Esta línea está causando problemas
            },
        }
    });

editor. BlockManager.add('app-body', {
        etiqueta: 'Dynamic Page Body',
        atributos: {
            Clase: 'FA FA-FILE-Code-O'
        },
        Categoría:{
            etiqueta: "Tema",
            Orden: 1
        },
        Contenido: {
            Tipo: 'Cuerpo-Aplicación'
        }
    });
}

Así que siempre que ''' this.components('<app-body props='${value}'></app-body>'); "'' Esta línea se ejecuta, el bloque cargado se vuelve invisible o no renderizado. Una solución que conseguí fue volver a renderizar DomComponents después de esta llamada: ''' editor. DomComponents.render() ''' pero eso no parece una buena opción, ¿hay alguna otra solución para este problema?

Respuestas (2)

artf19 de octubre de 2019

@mustahsanmustafa Creo que aquí hay algo que se está torciendo... '''js init() { this.listenTo(this, 'change:attributes', this.handleChange); this.handleChange(); }, handleChange() { valor const = JSON.stringify(this.getAttributes()); this.components('<app-body props='${value}'></app-body>'); Esta línea está causando problemas },


Para cualquier nuevo componente 'app-body' estás creando un nuevo interior con este 'this.components('<app-body props='${value}'></app-body>')'. El método 'this.components' actualiza el contenido interno, no el componente en sí... Si necesitas actualizar una propiedad, deberías hacer solo esto: 'this.set('propName', 'propValue')'.
También puedes escuchar un cambio de atributo único si quieres:
'''js
this.listenTo(this, 'change:attributes:search-placeholder', this.handleChange);

ps. Según las especificaciones HTML5, los nombres de atributos SOLO deben estar en minúsculas, así que cambia 'searchPlaceHolder' por algo como 'search-placeholder'

pouyamiralayi16 de octubre de 2019

¡Hola! Ser más específico en la reacción sobre qué atributo está cambiando realmente te ayudaría a reducir el problema de rendimiento en tu caso. ¡Salud!

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.