Automáticamente envolve cada arrastre de componente en lienzo con otro componente
@pouyamiralayi conseguí resolver el problema haciendo que el componente fuera un objeto. Así. '''javascript resultante.contenido = { etiquetaNombre: 'div', removible: cierto, // No se puede quitar arrastrable: cierto, // No se puede mover copiable: true, // Desactivar copiar/pegar Clases: ['Contenedor'], Tipo: 'Cuadrí...
Lee la respuesta completa abajo ↓Pregunta
Estoy intentando asegurarme de que cada componente se arrastre hacia el lienzo para ser envuelto con un componente columna. Para lograrlo uso el evento de lienzo.
Primero desactivé el evento de ventana para evitar que se disparara el evento de arrastrar y soltar por defecto de HTML 5. Evento 'Canvas:Drop' '''javascript ditor.on('canvas:drop', function (dataTransfer) { event.preventDefault() })
Supongamos que mi componente de columna es tan simple, solo una div.
evento 'canvas:dragdata'
'''javascript
editor.on('canvas:dragdata', handleDragData)
function handleDragData (dataTransfer, result) {
if (!event.currentTarget.closest('.column')) {
result.content.'
<div class="column" data-gjs-type="column">
<div class="column-inner">
${dataTransfer.getData(dataTransfer.types[0])}
</div>
</div>
`
}
Error de retorno de código anterior, indicando que DataTransfer no está definido
Por lo que entiendo, podemos personalizar lo que dejamos caer en el lienzo con 'result.content'
Algo así como '''javascript //...
result.contenido = { tipo: 'encabezado' }
o
'''javascript
//...
result.content = '<div>Reemplazaré el componente arrastrado por defecto</div>'
Lo que no entiendo es cómo envolver el componente arrastrado con elemento/componente.
Respuestas (2)
@pouyamiralayi conseguí resolver el problema haciendo que el componente fuera un objeto. Así.
'''javascript resultante.contenido = { etiquetaNombre: 'div', removible: cierto, // No se puede quitar arrastrable: cierto, // No se puede mover copiable: true, // Desactivar copiar/pegar Clases: ['Contenedor'], Tipo: 'Cuadrícula', atributos: { título: 'aquí' }, estilo: { color: 'rojo'}, componentes: { etiquetaNombre: 'div', Clases: ['Row'], Hoverable: falso, seleccionable: false, arrastrable: falso, componentes: { etiquetaNombre: 'div', Clases: ['Col-Auto'], tipo: 'columna', estilo: { ancho: '100%', flex: 1 }, componentes: { tipo: JSON.parse(dataTransfer.getData(dataTransfer.types[0]))['type'] tipo: resultado.contento.tipo } } } }
En fin, gracias por intentar ayudar.
¡Hola! El evento que buscas es este
editor.on('bloque:arrastrar:stop', función (elemento) { element.replaceWith({ etiquetaNombre: 'div', estilo:{'borde': '1px rojo sólido'}, Componentes: [elemento] }) })
Fíjate aquí que estoy usando un div con borde rojo como wrapper; En tu caso es la columna.
Salud.
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #3512
Los elementos hijos no se pueden arrastrar, se pueden soltar y se pueden resaltar. también el CSS de todos los elementos hijos que no se insertan en la sección de estilo mientras se desarrolla un componente banner en un plugin
Hola @artf, Estoy intentando desarrollar un plugin sencillo para banners que incluya un encabezado, un subtítulo y un enlace. y cada elemen...
Issue #2311
[PREGUNTA] Establecer href para componente de enlace
Hola chicos. Estoy intentando modificar el componente nativo de enlaces, hasta ahora tengo un modal que se abre en el evento dblclick y el...
Issue #1030
[Pregunta] Eventos de disparo con componentes personalizados
Estoy intentando crear un plugin para Grapesjs con algunos componentes personalizados, y tengo problemas para activar eventos e interactuar...
Issue #1912
[PREGUNTA] Componentes personalizados hijos por defecto
Hola, Estoy intentando entender cómo puedo lograr lo siguiente.Crear un componente con un contenido predeterminado como hijos.Crea un bloqu...
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.