Issue #2052💬 RespondidoAbierto el 31 de mayo de 2019por tsuwunrut-carecloudReacciones 0

Campos de fusión

Respuesta rápidapor artf

Generalmente, para evitar perder la selección en el clic del elemento usas 'event.preventDefault()', así que puede que sea tu caso, pero no estoy seguro. Intenta al menos crear una demo reproducible, por cierto cerro el problema porque no tiene nada que ver con el núcleo en sí

Lee la respuesta completa abajo ↓

Pregunta

Tengo una pregunta sobre campos de fusión, similar a https://github.com/artf/grapesjs/issues/481. Estoy intentando que el botón icono de mi campo de fusión desactive un modal con un desplegable de entrada, y después de seleccionar una opción del desplegable, que el campo de fusión se inserte solo.

    rte.add('newMergeField', {
      icono: '<button onclick="searchMergField(true)" id="newMergeFieldButton">Merge Field Search</button>',
      evento: 'clic',
      Resultado: RTE => {
        const { focusOffset, anchorOffset } = rte.doc.getSelection();
        window.rteInsertHTML = res => {
          const currentHtml = cloneDeep(rte.el.innerText);
          const [inicio, fin] = FocusOffset < AnchorOffset ? [DesplazamientoFocal, DesplazamientoAncla]: [DesplazamientoAncla, DesplazamientoEnfoque];
          const [primero, último] = [currentHtml.slice(0, inicio), currentHtml.slice(fin, currentHtml.length - 1)];
          rte.el.innerText = primero + res + último;
        }
      },
    });

^ Tengo algo en esta línea. Al hacer clic en el botón icono, simplemente se almacena una función en el objeto de la ventana que se llamará después de seleccionar una opción en el menú desplegable de entrada. Esto funciona perfectamente salvo por un problema. Si decido pulsar "enter" varias veces al final del área de texto e intento añadir un campo de fusión en la parte inferior, en su lugar lo añadirá al principio del campo de texto.

Creo que esto se debe a que el objeto Rango pierde todos sus desplazamientos cuando pulso "enter". Pero si este es el caso, ¿cómo funciona simplemente llamar a 'rte.insertHTML()' dentro del gestor de eventos integrado del icono?

¿Hay alguna forma de replicar el comportamiento de 'rte.insertHTML()' y que se inserte en la parte inferior de mi área de texto después de crear varias líneas nuevas pulsando "enter"?

He probado esto tanto con el objeto Selection como con el objeto Range (llamando a rte.doc.getSelection().getRangeAt(0)

Respuestas (1)

artf2 de junio de 2019

Generalmente, para evitar perder la selección en el clic del elemento usas 'event.preventDefault()', así que puede que sea tu caso, pero no estoy seguro. Intenta al menos crear una demo reproducible, por cierto cerro el problema porque no tiene nada que ver con el núcleo en sí

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.