Issue #761✓ ResueltoAbierto el 15 de enero de 2018por gabrigclReacciones 7

Problema de componentes de texto

Respuesta rápidapor Moikapy4

No estoy seguro si encontré este código en un Issue aquí o en Stack Overflow, pero este código aquí reemplaza los Divs por una <br/> cuando pulsas la tecla enter. He puesto este código en el mismo archivo que mi grapes-config ! uvasEjemplo '''js var iframeBody = editor. Lienzo.getBody(); $(iframeBody).on("keydown", "[...

Lee la respuesta completa abajo ↓

Pregunta

Hola. Ojalá tuviera un componente de texto que no cree nuevos componentes cada vez que pulso la tecla "Enter" para crear nuevos párrafos (esto es una mala usabilidad). Además, el componente textual real del núcleo de uvas presenta un problema (descrito en la pantalla más abajo). ¡Gracias de antemano por vuestra atención! ! gif-pantalla-uvas

Respuestas (3)

👍 Muy útilMoikapy17 de abril de 2019

No estoy seguro si encontré este código en un Issue aquí o en Stack Overflow, pero este código aquí reemplaza los Divs por una <br/> cuando pulsas la tecla enter. He puesto este código en el mismo archivo que mi grapes-config

! uvasEjemplo

'''js var iframeBody = editor. Lienzo.getBody(); $(iframeBody).on("keydown", "[contenteditable]", e => { atrapa la tecla return que se está pulsando si (e.Código clave === 13) { e.preventDefault(); insertar 2 etiquetas BR (si solo se inserta una etiqueta BR, el cursor no pasará a la siguiente línea) e.target.ownerDocument.execCommand("insertHTML", false, "<br><br>"); Prevenir el comportamiento por defecto de la tecla return presionada return false; } });

ryandeba18 de enero de 2018

Yo mismo investigué esto hace unos días... aparentemente hay una opción 'insertBrOnReturn' para 'execCommand', pero el soporte para navegadores es terrible. Una solución como esta (https://stackoverflow.com/questions/18552336/prevent-contenteditable-adding-div-on-enter-chrome) probablemente sea mejor.

@artf ¿Cómo te gustaría que cambiara esto? ¿Debería pulsar enter <br>insertar etiquetas '' como se muestra en la respuesta superior de la discusión sobre ESO? ¿Querrías exponer esto como una opción de configuración?

gabrigcl18 de enero de 2018

He encontrado una solución a mis necesidades usando CKEditor y anulando el componente nativo de "texto" para crear el mío propio. Mi componente de texto ahora es una div con una clase css que identifica el componente:

'''javascript comps.addType('text', { model: textModel.extend({ defaults: Object.assign({}, textModel.prototype.defaults, { etiquetaNombre: 'div', nombre: 'Texto', arrastrable: '', Droppable: Falso }), }, { isComponent: function(el) { if(el.tagName == 'DIV' && el.classList.contains('txt')){ return {type: 'text'}; } }, }) /...*/


Ahora, escribir ENTER no crea un nuevo componente. Sin embargo, esta solución no resuelve este problema, para quienes no quieren usar editores de texto de terceros.

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.