Issue #2733💬 RespondidoAbierto el 23 de abril de 2020por randohinnReacciones 1

Viendo comportamientos extraños al implementar uvas en mi sitio

Respuesta rápidapor Ju99ernaut1

Hola @randohinn, 1) Supongo que eliminar la clase no elimina el estilo, pero sí elimina los estilos asociados a esa clase del bloque, prueba a añadir la clase de nuevo y mira si los estilos vuelven 2) Por defecto, si un bloque tiene una clase, todas las propiedades de estilo que editas se añaden a la clase,Esto se ind...

Lee la respuesta completa abajo ↓

Pregunta

Estoy probando una implementación muy sencilla de uvas.

importar 'grapesjs/dist/css/grapes.min.css';
importar uvas de 'uvas';

sea blockElements = [];

const files = require.context('./blocks', true, /\.js$/i)
archivos.llaves().mapa(clave => blockElements.push(requiere('./blocks/'+key.split('./')[1]).default));

window.editor = grapesjs.init({
  Indica dónde iniciar el editor en el editor. También puedes aprobar un HTMLElement
  Contenedor: '#gjs',
  Consigue el contenido del lienzo directamente del elemento
  Como alternativa, podríamos usar: 'components: '<h1>¡Hello World Component!</h1>' `,
  fromElement: cierto,
  
Desactiva el gestor de almacenamiento por el momento
  storageManager: false,
  Evita cualquier panel por defecto
  paneles: { predeterminados: [{
    id: 'conmutador de panel',
    EL: '.panel__switcher',
    botones: [{
      id: 'bloques de exposición',
      ACTIVO: Cierto,
      etiqueta: 'Bloques',
      Orden: 'Bloques de Exhibición',
      Activable: falso,
    }, {
      id: 'capas de exhibición',
      activo: falso,
      etiqueta: 'Layers',
      Orden: 'Mostrar capas',
      Una vez activada, desactiva la posibilidad de desactivarlo
      Activable: falso,
    }, {
      id: 'estilo de espectáculo',
      activo: falso,
      etiqueta: 'Styles',
      Orden: 'Estilos de Exhibición',
      Una vez activada, desactiva la posibilidad de desactivarlo
      Activable: falso,
    }
  ],
}]},
blockManager: {
  appender a: '.contenedor-bloques',
  bloques: bloqueElementos,
},
layerManager: {
  appendTo: '.capas-contenedor',
},
selectorManager: {
  appendTo: '.estilos-contenedor'
},
StyleManager: {
  append To: '.estilos-contenedor',
  Sectores: [{
    nombre: 'Dimension',
    abierto: falso,
    Uso de propiedades integradas
    buildProps: ['ancho', 'altura', 'acolchado', 'margen'],
    Usa 'propiedades' para definir o anular una sola propiedad
    Propiedades: [
      {
        Tipo de entrada,
        opciones: entero | Radio | select | color | deslizador | archivo | compuesto | Stack
        tipo: 'entero',
        nombre: 'Ancho', // Etiqueta para la propiedad
        propiedad: 'width', // propiedad CSS (si buildProps la incluye, se extenderá)
        unidades: ['px', '%', 'vw'], // Unidades, disponibles solo para tipos 'enteros'
        valores por defecto: 'auto', // Valor por defecto
        min: 0, // Valor mínimo, disponible solo para tipos 'enteros'
      },
      {
        Tipo de entrada,
        opciones: entero | Radio | select | color | deslizador | archivo | compuesto | Stack
        tipo: 'entero',
        nombre: 'Height', // Etiqueta de la propiedad
        propiedad: 'altura', // propiedad CSS (si buildProps la contiene, se extenderá)
        unidades: ['px', '%', 'vh'], // Unidades, disponibles solo para tipos 'enteros'
        valores por defecto: 'auto', // Valor por defecto
        min: 0, // Valor mínimo, disponible solo para tipos 'enteros'
      }
    ]
  },{
    nombre: 'Extra',
    abierto: falso,
    buildProps: ['fondo', 'sombra de caja', 'prop personalizado'],
    Propiedades: [
      {
        ID: 'Atrezzo personalizado',
        nombre: 'Custom Label',
        Propiedad: 'tamaño de fuente',
        tipo: 'select',
        Valores predeterminados: '32px',
        Lista de opciones, disponibles solo para tipos 'select' y 'radio'
        Opciones: [
          { valor: '12px', nombre: 'Tiny' },
          { valor: '18px', nombre: 'Medium' },
          { valor: '32px', nombre: 'Big' },
        ],
      }
    ]
  }]
},
});

const panelManager = editor. Paneles;
editor. Commands.add('show-layers', {
  getRowEl(editor) { return editor.getContainer().closest('.editor-row'); },
  getLayersEl(row) { return row.querySelector('.layers-container') },
  
run(editor, sendero) {
    const lmEl = this.getLayersEl(this.getRowEl(editor));
    lmEl.style.display = '';
  },
  stop(editor, remitente) {
    const lmEl = this.getLayersEl(this.getRowEl(editor));
    lmEl.style.display = 'ninguno';
  },
});

editor. Commands.add('show-blocks', {
  getRowEl(editor) { return editor.getContainer().closest('.editor-row'); },
  getLayersEl(row) { return row.querySelector('.blocks-container') },
  
run(editor, sendero) {
    const lmEl = this.getLayersEl(this.getRowEl(editor));
    lmEl.style.display = '';
  },
  stop(editor, remitente) {
    const lmEl = this.getLayersEl(this.getRowEl(editor));
    lmEl.style.display = 'ninguno';
  },
});

editor. Commands.add('show-styles', {
  getRowEl(editor) { return editor.getContainer().closest('.editor-row'); },
  getLayersEl(row) { return row.querySelector('.styles-container') },
  
run(editor, sendero) {
    const lmEl = this.getLayersEl(this.getRowEl(editor));
    lmEl.style.display = '';
  },
  stop(editor, remitente) {
    const lmEl = this.getLayersEl(this.getRowEl(editor));
    lmEl.style.display = 'ninguno';
  },
});

panelManager.addPanel();

Y el único bloque requerido por el requerimiento automático al final es:

exportar default {
    'id': 'sección de altura completa',
    'etiqueta': 'Sección de altura completa',
    'contento': '
        <section data-gjs-type="default" class="w-full h-full bg-red-500">
        </section>
    `
}

Tengo dos problemas y una pregunta:

  1. Eliminar una clase del editor de estilo, borra el resto del estilo...
  2. Añadir un segundo bloque, tras cambiar las propiedades del primer bloque... no añade un bloque sin estilo, duplica el que ya existía
  3. ¿Hay alguna forma de marcar un bloque como no nestable, por ejemplo, que solo pueda estar en la capa superior?

¿Qué podría hacer para arreglarlo?

Respuestas (3)

Ju99ernaut26 de abril de 2020

Hola @randohinn,

  1. Supongo que eliminar la clase no elimina el estilo, pero sí elimina los estilos asociados a esa clase del bloque, prueba a añadir la clase de nuevo y mira si los estilos vuelven
  2. Por defecto, si un bloque tiene una clase, todas las propiedades de estilo que editas se añaden a la clase,

Esto se indica por el color de las etiquetas en las propiedades de estilo.

• así que los otros bloques que añadas con esa clase sí
También tengo los mismos cambios. Si quieres aplicar estilos a un solo bloque, primero tienes que desactivar las clases.

Para asegurarte de que las propiedades que cambias solo se apliquen al bloque que editas por defecto, añade esto a tu configuración

'''js window.editor = grapesjs.init({ //... selectorManager : { componentFirst: true}, //... });

3) Creo que tendrás que definir un nuevo componente para eso. Echa un vistazo a [grapesjs-plugin-forms](https://github.com/artf/grapesjs-plugin-forms) como referencia. Los bloques en la categoría de formas están hechos de modo que solo pueden dejarse caer dentro de un bloque de forma.
arretnet24 de abril de 2020

Hola, Tengo el mismo problema desde esta mañana. Ayer y los días anteriores todo estaba bien.

Un cordial

arretnet24 de abril de 2020

Lo siento, no pasa nada. He hecho una modificación en un componente que genera el problema

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.