Corregir y refactorizar Sorter.ts
Pregunta
- Corregir el uso del Ordenador en StyleManager (regresión con capas de propiedades de ordenación)
- Clasificador de refactorización con el uso de 'Components.canMove'
- Actualizar 'canMove' comprobando que el símbolo principal se elimina dentro de su propia instancia.
Respuestas (3)
Esto está hecho.
La idea es refactorizar el clasificador para mejorar la mantenibilidad y legibilidad. Podemos implementar los siguientes cambios:
- Hacer que la clase 'Sorter' dependa de una estructura abstracta de árbol en lugar de depender de implementaciones específicas como 'Component' o 'Layers', hacer que la clase 'Sorter' funcione con una estructura de árbol más genérica y abstracta. Esto lo hará más flexible y reutilizable.
- Dividir el código en varias clases más pequeñas, cada una con una sola responsabilidad
- 'ComponentManager.canMove': Utiliza el método 'ComponentManager.canMove' para determinar si un 'Component' puede moverse. Esto evita duplicar código y garantiza un comportamiento consistente en diferentes partes de tu aplicación.
Veremos cómo podemos aplicar esos puntos uno por uno
- Para hacer que la clase 'Sorter' sea independiente de cualquier implementación de modelo, podemos añadir un argumento en 'SorterOptions' que es una función que devuelve si un elemento puede arrastrarse a otro elemento.
'''tsx export interface SorterOptions { contenedor?: HTMLElement; canMove: (targetModel: Model<any>, srcModel: Model<any>, index: number) => booleano; ... } ```
Por ejemplo, inicializar el 'Clasificador' para las 'Capas' en el 'StyleManager'
'''tsx Nuevos servicios públicos. Clasificador({ contenedor: esto.el, canMove: (targetModel, srcModel, index) => { return targetModel.view === this.el // Permitir que se descarte si el destino es el contenedor }, Em, }) ```
Y para cualquier cosa que dependa de 'Componente' sería
'''tsx Nuevos servicios públicos. Clasificador({ contenedor: esto.el, canMove: editor. Components.canMove, Em, }) ```
- Dividir la funcionalidad de la clase 'Clasificador' en varias clases
- 'DeterminadorDeDropLocation'
- Recibe entrada: Toma como entrada datos de movimiento del ratón, el elemento HTML que se arrastra, la estructura del árbol y la función 'canMove'.
- Calcula la ubicación de la caída: Analiza la posición del ratón, la estructura del árbol y la función 'canMove' para determinar el índice más adecuado para el elemento caído.
- 'Manipulador de arrastre y solte'
- Crea y gestiona elementos: Crea y gestiona el marcador de posición, el asistente de arrastre y el elemento que se está arrastrando, asegurando su apariencia y posición correctas.
- 'DeterminadorDeDropLocation'
Gracias por informar de esto, @mohamedsalem401.
Gracias por compartir tu informe sobre [Arreglar] Corregir y refactorizar Sorter.ts. Para ayudar al equipo a investigar y priorizar esto:
Por favor, proporciona:
- Un ejemplo mínimo reproducible (CodeSandbox/JSFiddle)
- Tu GrapesJS número de versión
- Información sobre navegador y sistema operativo
- Cualquier mensaje de error de la consola del navegador
- Pasos para reproducir el problema
Lo que más ayuda:
- Ejemplo de código mínimo (no tu proyecto completo)
- Grabación de pantalla o captura de pantalla que muestra el problema
- Comportamiento esperado frente a comportamiento real claramente indicado
- Configuración GrapesJS que estás usando
Con estos detalles, los mantenedores pueden identificar y priorizar una solución mucho más rápido. El equipo de GrapesJS responde muy bien a los problemas bien documentados.
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #4191
Estamos intentando almacenar los datos del editor grapesJS en la aplicación Angular 10, obteniendo un error CORS, imagen adjunta abajo
Versión GrapesJS [x] Confirmo que uso la última versión de GrapesJS ¿Qué navegador usas? Chrome 99.0.4844.5 Enlace de demo reproducible htt...
Issue #3557
Actualización: ¿cómo actualizar las plantillas antiguas a la versión más reciente?
Tengo algunas plantillas que se generaron con la v0.14.5. ¿Cómo puedo "actualizarlas" a la última versión? Tienen clases asociadas y veo qu...
Issue #3397
Dirección incorrecta del clasificador con la ranura de componentes web
Versión: 0.16.45 ¿Puedes reproducir el error de la demo?[x] Sí[ ] No ¿Cuál es el comportamiento esperado? Dada una instancia de componente...
Issue #3335
Creando rasgo con la interfaz de propiedad del Style Manager
Tengo un componente que usa la propiedad 'background-url' del Style Manager: Me gustaría reutilizar esta interfaz que aparece en el Style M...
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.