Issue #4116💬 RespondidoAbierto el 1 de febrero de 2022por saudAtIrisdameReacciones 0

Flex Property no funciona en el gestor de estilo

Respuesta rápidapor Vac1911

Diagnosticé el problema tras encontrar el mismo problema por mi cuenta. Mirando 'StyleManager.select()' https://github.com/artf/grapesjs/blob/75cd582a8d1a91096276bc4dccc7475a269ad45c/src/style_manager/index.js#L339-L395 En la línea 369, cada propiedad se recorre para comprobar su visibilidad para el nuevo objetivo. Si...

Lee la respuesta completa abajo ↓

Pregunta

Versión GrapesJS

  • Confirmo que uso la última versión de GrapesJS

¿Qué navegador usas?

Versión 1.34.81 Chromium: 97.0.4692.99 (Versión oficial) (64 bits)

Enlace de demo reproducible

https://codesandbox.io/s/strange-sun-qgdcq?file=/index.js

Describe el bicho

! Propiedad Flexible

¿Cómo reproducir el bicho?

  1. crear un componente de tipo personalizado
  2. Colocar el componente en el lienzo
  3. Configura la propiedad de visualización en flex en el gestor de estilos.

¿Cuál es el comportamiento esperado? Debería mostrar las propiedades de flexión cuando la pantalla (propiedad general) es flexible

¿Cuál es el comportamiento actual? No mostrar propiedades de flexión

Es necesario ejecutar algo de código para reproducir el error, pégalo aquí abajo: '''js Tu código aquí


### Código de conducta

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

Respuestas (4)

Vac19118 de febrero de 2022

Diagnosticé el problema tras encontrar el mismo problema por mi cuenta.

Mirando 'StyleManager.select()'

https://github.com/artf/grapesjs/blob/75cd582a8d1a91096276bc4dccc7475a269ad45c/src/style_manager/index.js#L339-L395

En la línea 369, cada propiedad se recorre para comprobar su visibilidad para el nuevo objetivo.

Sin embargo, la función '__checkVisibility' no accede al valor actual mirando los estilos del objetivo. En su lugar, busca el valor actual almacenado en el modelo de propiedad. (fuente)

El problema es que se llama '__checkVisibility' antes de que el modelo de propiedad no haya sido informado de que se ha seleccionado un nuevo objetivo, ya que eso no ocurre hasta la línea 392. Así que el valor que se está comprobando no proviene del objetivo que acabamos de seleccionar.

saudAtIrisdame9 de febrero de 2022

@Vac1911 @artf Lo entiendo, pero ¿cuál es la solución, cómo puedo solucionar este problema? ¿Es este problema de Grapejs o mío?

Vac19119 de febrero de 2022

@saudAtIrisdame Parece que es un problema de Grapejs. Lo arreglé yo mismo cambiando el código fuente, reordenando el método 'select' para comprobar la visibilidad al final.

Aquí está el archivo dist después de ejecutar 'build:js' https://gist.github.com/Vac1911/4c89f2a48809bee5fefd2d21525d37ad

'''js select(target, opts = {}) { const { em } = esto; const trgs = isArray(objetivo) ? objetivo: [objetivo]; const { stylable } = opts; const cssc = em.get("CssComposer"); Sea los objetivos = [];

trgs.filter(Boolean).forEach((target) => { Sea modelo = objetivo;

if (isString(target)) { regla const = cssc.getRule(target) || cssc.setRule(objetivo); !isUndefined(stylable) && rule.set({ stylable }); modelo = regla; }

targets.push (modelo); });

componente const = opts.component || targets.filter((t) => isComponent(t)).reverse()[0]; targets = targets.map((t) => this.getModelToStyle(t)); estado const = em.getState(); const lastTarget = targets.slice().reverse()[0]; const lastTargetParents = this.getParentRules(lastTarget, { estado, componente, }); sea stateTarget = this.__getStateTarget();

Gestiona la creación y actualización de la regla de estado, si está habilitada. em.skip(() => { si (state & lastTarget?. ¿getState?. ()) { const style = lastTarget.getStyle(); if (!stateTarget) { stateTarget = cssc .getAll() .add({ selectors: "gjs-selected", style, important: true }); } else { stateTarget.setStyle(estilo); } } else if (stateTarget) { cssc.remove(stateTarget); stateTarget = null; } });

this.model.set({ targets, lastTarget, lastTargetParents, stateTarget }); this.__upProps(opta);

Actualizar visibilidad de sectores/propiedades sectors.forEach((sector) => { const props = sector.getProperties(); props.forEach((prop) => { const isVisible = prop.__checkVisibility({ objetivo: lastTarget, componente, sectores, }); prop.set ("visible", isVisible); }); const sectorVisible = props.some((p) => p.isVisible()); sector.set ("visible", sectorVisible); });

devolver objetivos; },

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @saudAtIrisdame.

Buena pregunta sobre Flex Property que no trabaja en el estilo de gestor. El enfoque recomendado con StyleManager es usar la API orientada a eventos.

Empieza aquí:

  1. Consulta la documentación de GrapesJS de tu módulo específico
  2. Busca el método del oyente de eventos 'on()'
  3. La mayoría de las operaciones se pueden realizar escuchando eventos del editor y de los componentes

Patrones comunes: '''javascript Prestad atención a los cambios editor.on('Change', () => console.log('Something Changed'));

Ciclo de vida de los componentes editor.on('component:mount', (c) => console.log('component ready', c)); editor.on('component:update', (c) => console.log('component updated', c));


**Si sigues atascado:**
- Compartir una reproducción mínima de CodeSandbox
- Incluye lo que ya has probado
- Menciona tu versión GrapesJS
- ¡La comunidad está aquí para ayudar!

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 →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

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