El lienzo elimina el renderizado de componentes tras el evento de cambio de valor de los rasgos
@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)
@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'
¡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.
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 #1535
[Bug]: Después de eliminar un componente personalizado, la vista del rasgo no se limpia
Hola, Estoy usando la biblioteca grapesjs versión 0.14.33. He creado algunos componentes personalizados y he notado que al eliminar los com...
Issue #3074
Renderizado de componentes angulares en GrapesJS.
Renderizado de componentes angulares en GrapesJS. Estoy creando un editor Angular con GrapesJS. Puedo integrar GrapesJS en mi proyecto Angu...
Issue #2706
[PREGUNTA] ID único en contenido de bloque sin estilo en línea
Hola a todos, He creado un elemento gestor de bloques personalizado, pero cuando se edita, aplica el estilo a la clase, lo que significa qu...
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.