Issue #1881💬 RespondidoAbierto el 12 de marzo de 2019por lucasschirmReacciones 0

¡Comandos con método de detención, nunca detenidos programáticamente, no se ejecutan de nuevo!

Respuesta rápidapor artf

Hola @lucasschirm y gracias por el informe. Como habrás notado, este es el cambio que hemos introducido en la última versión https://github.com/artf/grapesjs/releases/tag/v0.14.55 La razón detrás de esto es bastante sencilla. Si creas un comando con 'start' y 'stop', lo declaras explícitamente como stateful uno, así q...

Lee la respuesta completa abajo ↓

Pregunta

Fragmento de códigoTEXT
# Problema

Cuando añades un comando personalizado con stop y don't stop, no se ejecutará de nuevo si no pongo force: 1 como parámetro al ejecutar.

Cuando añades un comando personalizado con un método de parada como:

VAR disparado = 0;
editor. Commands.add('custom-command', {
   run() {
      disparado++;
      console.log("disparado", disparado);
   },
   stop() {
      console.log("Comando detenido");
   }
});

y si nunca se detiene el run, el método run nunca volverá a dispararse.

editor. Commands.run ('custom-command');
editor. Commands.run ('custom-command');
editor. Commands.stop ('custom-command');
editor. Commands.run ('custom-command');

debería imprimir

disparado 1
disparado 2
detenido
disparado 3

Otra solución añadiría una propiedad a la Colección de Comandos que sea así:

editor. Commands.add('custom-command', {
   runType: 'always' || 'after-stop' || 'después de detenerse o forzar',
   run() {
      disparado++;
      console.log("disparado", disparado);
   },
   stop() {
      console.log("Comando detenido");
   }
});

# Violín GrapeJS

https://jsfiddle.net/lucasschirm/85juepgs/5/

# Cómo replicar

- Crear un nuevo comando con función de parada
 - añadir un oyente a modal:open para ejecutarlo
 - añadir un oyente a modal:close para detenerlo
 - añadir un oyente en component:toggled para abrir un modal

## Lo que ocurre es:
 - (clic en cualquier bloque) Comando ejecutado
 - Modal Opens
 - (cierra el modal) No dispares modal:close
 - (clic fuera del bloque) Modal Opens

## Qué debería estar ocurriendo y comportamiento en versiones anteriores:

- (clic en cualquier bloque) Ejecuciones de comandos
 - Modal Opens
 - (cierra el modal) No dispares modal:close
 - (clic fuera del bloque) Comando ejecutado
 - Modal Opens

Respuestas (3)

artf22 de marzo de 2019

Hola @lucasschirm y gracias por el informe. Como habrás notado, este es el cambio que hemos introducido en la última versión https://github.com/artf/grapesjs/releases/tag/v0.14.55 La razón detrás de esto es bastante sencilla. Si creas un comando con 'start' y 'stop', lo declaras explícitamente como stateful uno, así que lo activas en 'start' y lo desactivas en 'stop'. Cuando el comando está activo (puedes obtener todos los comandos actualmente activos con 'editor. Commands.getActive()') no tiene sentido ejecutar sus instrucciones de activación de nuevo (esto también evita problemas extraños que podrías tener al ejecutar estas instrucciones varias veces) y lo mismo ocurre una vez que el comando está desactivado. Aparte de eso, siempre puedes forzarlo con la opción 'forzar', así que no lo veo como un problema. Una cosa que se me ocurre añadir (para que se comporte como la versión anterior, pero no lo recomiendo, porque probablemente no estás creando tu comando correctamente) es algún tipo de opción global, por ejemplo: '''js grapesjs.init({ ..., comandos: { estricto: falso, // por defecto es verdadero }, })

lucasschirm22 de marzo de 2019

Gracias, he enviado un comunicado por el cierre modal y no disparando el modal I Gatillo cerrado.

El jueves, 21 de marzo de 2019, 15:14 Artur Arseniev [email protected] Escribió:

Hola @lucasschirm https://github.com/lucasschirm y gracias por el informe. Como habrás notado, este es el cambio de ruptura que hemos introducido en el última versión https://github.com/artf/grapesjs/releases/tag/v0.14.55 La razón detrás de esto es bastante sencilla. Si creas un comando con start y stop declaras explícitamente que es con estado uno, así que tú actívalo al arrancar y desactivarlo al parar. Cuando el comando está activo (puedes obtener todos los comandos actualmente activos con editor. Commands.getActive()) no tiene sentido ejecutar su activación instrucciones de nuevo (esto también evita problemas extraños que puedas tener ejecutando estas instrucciones varias veces) y lo mismo ocurre una vez que el comando está desactivado. Aparte de eso, siempre puedes forzarlo con la opción de forzar, así que no lo veo como un problema. Una cosa que se me ocurre añadir (solo para que se comporte como el versión anterior, pero no la recomiendo, porque probablemente estés creando tu comando no es correcto) es algún tipo de opción global, por ejemplo:

grapesjs.init({ ..., ordenes: { estricto: falso, // por defecto es verdadero }, })

— Recibes esto porque te mencionaron. Responde directamente a este correo, viséalo en GitHub https://github.com/artf/grapesjs/issues/1881#issuecomment-475423347, o mudo el hilo https://github.com/notifications/unsubscribe-auth/AFFgEmhHBOjwigByVdovuV-iEwj4FrWTks5vZAQ1gaJpZM4bp2N8 .

lock[bot]21 de marzo de 2020

Este hilo se ha bloqueado automáticamente porque no ha habido actividad reciente desde que se cerró. Por favor, abre un nuevo problema para bugs relacionados.

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 →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.