Issue #2055✓ ResueltoAbierto el 31 de mayo de 2019por zhangyanweiReacciones 5

¿Cómo retirar correctamente los componentes?

Respuesta rápidapor zhangyanwei4

He probado a llamar al método 'setSelected' antes de eliminar componentes, ¡funciona! Aquí está el código actualizado: '''javascript Comando: Combinar las celdas editor. Commands.add('table:table-cells-combine', editor => { const em = editor.getModel() componentes const = editor.getSelectedAll() Conserva el primer com...

Lee la respuesta completa abajo ↓

Pregunta

Quiero eliminar los componentes de forma programática, lo siguiente es mi fragmento de código. '''javascript Comando const = editor. Commands.get('select-comp') editor. Commands.extend('select-comp', { Sobrescribe este método privado para que la barra de herramientas se muestre condicionalmente. updateToolbar(mod) { const em = this.config.em const model = mod == em ? em.getSelected() : mod si (modelo) { const toolbar = model.get('__toolbar') || model.get('barra de herramientas') const filtered = toolbar.filter(item => item.isDisponible === indefinido || item.isAvailable.call(this, em)) model.has('__toolbar') || model.set('__toolbar', barra de herramientas) model.set('toolbar', filtrado) } Command.updateToolbar.call(this, mod) } })

====== ↓ Eliminar lógica ↓ ====== Comando: Combinar las celdas editor. Commands.add('table:table-cells-combine', editor => { const em = editor.getModel() componentes const = editor.getSelectedAll() Elige la primera opción seleccionada como celda primaria. Componente const = componentes[0] Conserva este componente, pero elimina otros seleccionados. components.slice(1, components.length).forEach(item => item.remove()) Actualizar los atributos const [rowspan, colspan] = component.get('__span') || [] component.setAttributes({rowspan, colspan}) em.setSelected(component) })

Extiende los elementos de la barra de herramientas de celdas. editor. DomComponents.addType('cell', { extendFn: ['initToolbar'], modelo: { initToolbar() { Modelo const = esto var TB = [... model.get('toolbar') || []]

Herramienta: combinar las celdas. tb.push({ Atributos: { Clase: 'FA FA-CUADRADO' }, comando: ed => ed.runCommand('table:table-cells-combine'), isAvailable (ed) { componentes const = ed.getSelectedAll() components.forEach(component => component.unset('__span')) si (components.length > 1) { const [ tl, br ] = componentes .reduce((r, comp) => { const [ tl, br ] = r const parent = comp.parent() si (padre) { ====== ↓ Problema ↓ ====== El padre puede estar indefinido, por ejemplo: el componente se eliminó antes del comando deshacer (Ctrl + Z). const rowIndex = parent.index() const columnIndex = comp.index() tl[0] < rowIndex || (tl[0] = índiceFilas) tl[1] < columnIndex || (tl[1] = columnIndex) br[0] > rowIndex || (br[0] = rowIndex) br[1] > columnIndex || (br[1] = columnIndex) } retorno r }, [[], []]) Envergadura const = br[0] - tl[0] + 1 const colspan = br[1] - tl[1] + 1 const seleccionado = componentes[0] selected.set('__span', [rowspan, colspan]) return components.length === colspan * rowspan } return false } }) model.set('toolbar', tb) } } })


Después de eliminar los componentes, deshacer las acciones de eliminación (Ctrl + Z), hacer las múltiples selecciones con la tecla shift obtendrá el error 'Uncaught TypeError: No puede leer la propiedad 'indexOf' de undefined'.

! [{0B88A939-BEF8-46ED-83F8-21D6AFD32D88}_20190531185100](https://user-images.githubusercontent.com/11482264/58701807-8ccd1000-83d6-11e9-8127-c667a865679c.jpg)

Mi pregunta es: ¿Cómo eliminar correctamente los componentes?

Respuestas (3)

👍 Muy útilzhangyanwei31 de mayo de 2019

He probado a llamar al método 'setSelected' antes de eliminar componentes, ¡funciona! Aquí está el código actualizado:

'''javascript Comando: Combinar las celdas editor. Commands.add('table:table-cells-combine', editor => { const em = editor.getModel() componentes const = editor.getSelectedAll() Conserva el primer componente seleccionado, pero elimina los demás. Componente const = componentes[0] const otros = components.slice(1, components.length) Actualizar los atributos const [rowspan, colspan] = component.get('__span') || [] component.setAttributes({rowspan, colspan}) Restablece el estado de selección antes de retirar otros componentes. em.setSelected(component) Quita los componentes, las siguientes dos formas funcionan en ambas ocasiones. const parent = component.parent() padre.components(component.collection.filter(comp => !others.includes(comp))) others.forEach(item => item.remove()) })

zhangyanwei11 de agosto de 2022

@joselin bizmatesph No lo he estado tocando en 3 años, pero supongo que es similar al caso que tuve. Por la instantánea que publicaste, parece que eliminaste los componentes incorrectos y puede que tengas que comprobar el rowspan y el colspan del componente guardado.

bizmatesph-joselin-macayanan8 de agosto de 2022

@zhangyanwei Me pasó lo mismo, tengo algunos problemas cuando intento fusionar la celda de abajo hacia arriba. ¿Ya has solucionado el problema?

! imagen ! imagen

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.