Problema al intentar inyectar nuevo contenido HTML en el Editor
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)
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é:
- 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));
- 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.
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.
Issue #1748
Cómo evitar que los elementos arrastren dentro del editor
Hola @artf Lo estás haciendo muy bien con grapesjs y es extremadamente útil hacer que nuestra funcionalidad sea más fácil de usar. Gracias...
Issue #509
Los span no se pueden editar como texto
Hola Artf, Tengo un problema al importar algunas plantillas HTML. Al principio no podía ver los textos en span. Pero después de ayudar al e...
Issue #1265
Cómo usar funciones PHP dentro de un editor de iframe ???
Hola @artf, Actualmente estoy trabajando en PHP, WordPress y Grapesjs. Lo que quería aquí era... ¿Cómo puedo añadir las funciones PHP dentr...
Issue #1423
[PREGUNTAS] Miga de pan
Hola @artf, Ahora estoy trabajando en crear una miga de pan similar al LayerManager, pero me gustaría saber si ya existe algún método que m...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
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 →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.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.