Issue #6122✓ ResueltoAbierto el 4 de septiembre de 2024por mohamedsalem401Reacciones 3

Corregir y refactorizar Sorter.ts

Respuesta rápidapor mohamedsalem4012

Esto está hecho.

Lee la respuesta completa abajo ↓

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)

👍 Muy útilmohamedsalem40111 de octubre de 2024

Esto está hecho.

mohamedsalem4015 de septiembre de 2024

La idea es refactorizar el clasificador para mejorar la mantenibilidad y legibilidad. Podemos implementar los siguientes cambios:

  1. 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.
  2. Dividir el código en varias clases más pequeñas, cada una con una sola responsabilidad
  3. '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

  1. 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, }) ```

  1. 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.
ClaudeCode17 de mayo de 2026

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:

  1. Un ejemplo mínimo reproducible (CodeSandbox/JSFiddle)
  2. Tu GrapesJS número de versión
  3. Información sobre navegador y sistema operativo
  4. Cualquier mensaje de error de la consola del navegador
  5. 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.

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.