Issue #6096💬 RespondidoAbierto el 30 de agosto de 2024por kanaihyakumarReacciones 2

La caja redimensionable desaparece al volver a seleccionar componentes

Respuesta rápidapor kanaihyakumar1

Antes, necesitaba ser más claro sobre los pasos para reproducir el problema. Aquí están los pasos más precisos para resolver el problema. Pasos para reproducir el problema:Haz clic directamente en la sección.Observa las opciones de tamaño que se muestran.Haz clic en un área dentro de la sección donde haya un component...

Lee la respuesta completa abajo ↓

Pregunta

Versión GrapesJS

  • Confirmo que se debe usar la última versión de GrapesJS

¿Qué navegador usas?

Chrome

Enlace de demo reproducible

https://jsfiddle.net/kanaihyakumar/oedg76nt/

Describe el bicho

Descripción

Al seleccionar cualquier componente del lienzo, se resalta la caja inferior de redimensionamiento según la configuración. Sin embargo, al volver a hacer clic en el mismo componente, desaparece la casilla de redimensionamiento.

Pasos para reproducirse

  1. Abre GrapesJS con el código HTML proporcionado.
  2. Selecciona cualquier componente del lienzo para ver la caja inferior de redimensionamiento.
  3. Haz clic en el mismo componente otra vez.
  4. Observa que la caja de redimensionamiento desaparece.

Comportamiento esperado

Fragmento de códigoHTML
La casilla inferior de redimensionamiento debería permanecer visible incluso después de volver a seleccionar el mismo componente.

### Comportamiento real
La caja inferior de redimensionamiento desaparece tras volver a seleccionar el mismo componente.

### Código
'''html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta nombre="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documento</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/grapesjs/0.21.12/css/grapes.min.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/grapesjs/0.21.12/grapes.min.js"></script>
    <script src="https://unpkg.com/[email protected]"></script>
    <style>
        html,
        cuerpo {
            marje: 0;
            relleno: 0;
        }
    </style>
</head>
<body>
    <main>
        <div id="gjs"></div>
    </main>
    <script>
        const htmlContent = '
           <style>
    .banner {
        Altura: 480px;
        color: #ffffff;
    }
    
.banner__container {
        Acolchado superior: 6%;
        relleno-izquierda: 15%;
        Acolchado-fondo: 10%;
    }
    
.banner__headline {
        familia de fuentes: Figtree;
    }
    
@media (max-width:767px) {
        .banner {
            Altura: 350px;
        }
        .banner__container {
            relleno-izquierda: 5%;
        }
    }
    
@media (max-width:480px) {
        .banner {
            Altura: 250px;
        }
    }
    </style>
    <section class="banner attribute" style="background-image: linear-gradient(#023f8080, #023f8080), url(https://images.pexels.com/photos/27308359/pexels-photo-27308359/free-photo-of-pigeons-on-a-tree.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1); background-position: superior izquierda; background-size: cover; background-repeat: no-repeat;">
        <div class="banner__container columna container-fluid">
            <h2 class="banner__headline mb-4 fs-1">Los pájaros son el ojo de alguien especial</h2>
        <a class="banner__button btn button-variable px-5 py-1" role="button">Click</a>
        </div>
    </section>
        `;
       
const editor = grapesjs.init({
            Contenedor: '#gjs',
            fromElement: cierto,
            Altura: '100VH',
            Ancho: 'Auto',
            Plugins: ['GJS-Bloques-Básico'],
            storageManager: false,
        });
        editor. DomComponents.addType('section', {
            isComponent: el => el.tagName === 'SECTION',
            modelo: {
                Predeterminados: {
                    etiquetaNombre: 'SECTION',
                    arrastrable: 'principal',
                    Droppable: falso,
                    resaltable: falso,
                    nombre: 'Section',
                    dmode: '',
                    redimensionable: {
                        Resumen: 0,
                        TC: 0,
                        TR: 0,
                        CR: 0,
                        CL: 0,
                        BL: 0,
                        BC: 1,
                        BR: 0
                    }
                }
            }
        });
        editor. DomComponents.addType('column', {
            extender: 'por defecto',
            isComponent: el => el.classList && el.classList.contains("column"),
            modelo: {
                Predeterminados: {
                    etiquetaNombre: 'DIV',
                    arrastrable: falso,
                    Droppable: Cierto,
                    Atributos: {},
                    nombre: 'Columna',
                    Editable: Cierto,
                    Hoverable: falso,
                    seleccionable: false,
                    capas: falso,
                    resaltable: falso,
                    Removible: falso
                }
            },
        });
        const mainComponent = editor.setComponents(htmlContent);
        sea sectionComponent = editor.getComponents().models[0];
        editor.on('component:selected', (component) => {
            const selected = editor.getSelected();
            si (seleccionado) {
                selected.set({
                    Arrastrable: Cierto,
                    Droppable: Cierto,
                    redimensionable: {
                        Resumen: 0,
                        TC: 0,
                        TR: 0,
                        CL: 0,
                        CR: 0,
                        BL: 0,
                        BC: 1,
                        br: 0,
                    },
                });
            }
        });
    </script>
</body>
</html>

### Código de conducta

- [X] Acepto seguir el Código de Conducta de este proyecto

Respuestas (4)

kanaihyakumar2 de septiembre de 2024

Antes, necesitaba ser más claro sobre los pasos para reproducir el problema. Aquí están los pasos más precisos para resolver el problema.

Pasos para reproducir el problema:

  1. Haz clic directamente en la sección.
  2. Observa las opciones de tamaño que se muestran.
  3. Haz clic en un área dentro de la sección donde haya un componente de columna (he añadido un borde a todos los elementos del vídeo proporcionado para mayor claridad). Observa que el componente de sección está seleccionado pero la opción inferior redimensionable no se muestra. Enlace al vídeo

Comportamiento real:

  1. Al hacer clic directamente en la sección, las opciones redimensionables inferiores se muestran como se espera.
  2. Sin embargo, al hacer clic en un área donde hay un componente de columna, se selecciona la sección pero no se muestran las opciones redimensionables inferiores.

Comportamiento esperado:

Al hacer clic en cualquier parte dentro de la sección, si el punto de clic no incluye ningún componente seleccionable, la sección debe estar seleccionada y mostrar las opciones redimensionables inferiores.

kanaihyakumar6 de septiembre de 2024

Créeme, tuve suerte de poder encontrar este comportamiento trágico de hacer clic en diferentes lugares dentro de la sección que se comportaba pero era diferente.

artf31 de agosto de 2024

No veo que desaparezca si no es al pulsar el clic, pero eso es de esperar cuando se prepara para arrastrarse

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @kanaihyakumar.

El problema con Desaparece la caja redimensionable al reseleccionar componentes parece ser una condición de carrera o un problema de sincronización de gestión de estado. Esto suele ocurrir cuando los eventos del ciclo de vida de los componentes y las modificaciones del DOM se superponen, creando un estado inconsistente.

Qué probar:

  1. Añadir un envoltorio setTimeout para asegurar que el DOM se ha asentado: '''javascript setTimeout(() => { Tu operación aquí }, 0);

2. **Comprobar el orden de inicialización** — asegúrate de que los componentes estén completamente cargados antes de interactuar con ellos

3. **Utilizar el sistema de eventos del editor** — escuchar los eventos de finalización:
'''javascript
editor.on('component:mount', (component) => {
  Es seguro interactuar con el componente aquí
});

Recomendaciones de siguientes pasos:

  • Prueba con la última versión de GrapesJS si no lo has hecho
  • Proporcionar un ejemplo mínimo reproducible (CodeSandbox) — esto ayuda al equipo a identificar la causa raíz más rápido
  • Incluir errores de GrapesJS, de navegador y de consola en tu informe

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.