Issue #1363💬 RespondidoAbierto el 14 de agosto de 2018por jvillenaReacciones 0

Problema al intentar inyectar nuevo contenido HTML en el Editor

Respuesta rápidapor jvillena

Acabo de solucionar mi problema haciendo una solución temporal tras investigar sobre el núcleo de Grapesjs. Voy a explicar la solución que usé: 1) Estoy usando un diálogo emergente con un switcher de bootstrap para seleccionar el idioma del texto. El problema complicado es cómo actualizar el modelo de componentes que...

Lee la respuesta completa abajo ↓

Pregunta

Hola @artf, ahora estoy trabajando en hacer contenido en varios idiomas dentro del editor, pero me gustaría saber cómo puedo guardar en el HTML de Dom los nuevos elementos HTML más cercanos al elemento seleccionado (o actualizar estos elementos como nuevos componentes dentro del editor). Por ejemplo, incluyo un div oculto dentro del HTML, pero cuando intento guardar el html haciendo getHTML desde el editor no consigo obtener este nuevo contenido HTML.

Gracias de antemano.

Respuestas (2)

jvillena17 de agosto de 2018

Acabo de solucionar mi problema haciendo una solución temporal tras investigar sobre el núcleo de Grapesjs. Voy a explicar la solución que usé:

  1. Estoy usando un diálogo emergente con un switcher de bootstrap para seleccionar el idioma del texto. El problema complicado es cómo actualizar el modelo de componentes que no están seleccionados en el editor. Para lograrlo tuve que hacer la siguiente:
const sel = ContentBuilder.getEditor().getSelected();
/**
* Este código actualiza nuevos elementos dentro del modelo cuando un usuario cambia de idioma.
* @type {*|Modelo|Component}
*/
                    const coll = sel.collection; Seleccioné los elementos de colección del elemento
                    const at = coll.indexOf(sel) + 1; Después de seleccionar el elemento, añadiré un nuevo componente
                    Let añadió;

Necesito añadir atributos especiales a un nuevo componente del editor para mi objetivo.
                    Añadir atributos especiales al elemento seleccionado con DEFAULT LANG CONDITION
                    sel.addAttributes({'attr-lang-id':element_clicked.attr("attr-lang-id")});
                    sel.addAttributes({'attr-condition':MYM_LANG_DEFAULT});

Clonar el nuevo componente más cercano al seleccionado.
                    añadido = coll.add(sel.clone(), { at });
                    Añadir un atributo de idioma para controlar más adelante el texto de idioma inyectado
                    added.addAttributes({'attr-lang-id':element_clicked.attr("attr-lang-id")});
                    added.addAttributes({'attr-condition':language_selected});
                    added.addClass(MYM_LANG_HIDDEN);
                    Establecer el contenido del texto
                    added.set('content', text);

añadido = Array.isArray(añadido) ? añadido: [añadido];
                  Para llamar al evento de clonación
                    added.forEach(add => ContentBuilder.getEditor().trigger('component:clone', add));

  1. Si desactivo la opción de idioma, necesito eliminar todos los nuevos componentes y actualizar el modelo del editor:
               Selecciona el componente en el Editor 
               const comp = ContentBuilder.getEditor().getSelected();
                const coll = comp.collection;
                const at = coll.indexOf(comp);

Necesitamos eliminar del uno seleccionado atributos como
                .removeAttr("attr-lang-id")
                .removeAttr("at-condición", MYM_LANG_DEFAULT)
                const attr = comp.getAttributes(); Para obtener todos los atributos del modelo
                eliminar at['atr-lang-id']; Para eliminar uuid
                eliminar atra['atracción condición']; Para eliminar la configuración de condiciones
                comp.setAttributes(attr);

Ahora necesito buscar todos los componentes que no son el predeterminado y que quiero mantener en el editor. Así que eliminaré todo excepto el componente que está en la posición 0.
                si (col.length > 1) {
                    Para eliminar todos los elementos excepto el primero
                    col.models.splice(1);
                }

comp.emitUpdate();

Así es como funciona: http://recordit.co/zcrpR0MRyv

Seguro que existe una forma sencilla de implementar esta solución, pero no he encontrado los buenos métodos para hacerlo.

Gracias de antemano.

lock[bot]17 de septiembre de 2019

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.