Añadir html personalizado dentro de Canvas
creo que es que, al añadir nuevos nodos dentro del lienzo, las uvas no pueden calcular el orden correcto. Correcto, el orden se basa en componentes del modelo, no en la vista. Entonces, para que quede claro, eso de '<label>' que añades en 'updateComponentView' es solo para el lienzo y no lo necesitas en tu estructura...
Lee la respuesta completa abajo ↓Pregunta
Hola,
Estoy usando uvas para exportar un json personalizado con toda la información que necesito, en lugar de HTML y CSS. Para hacer eso, estoy analizando los componentes gpjs almacenados en localStorage.
Ahora necesito personalizar cómo se renderizan los componentes dentro del lienzo. Por ejemplo, tengo un componente Input con dos rasgos (etiqueta y valor), y me gustaría renderizarlo dentro del lienzo con los rasgos de etiqueta como <label> etiqueta y valor como marcador de posición dentro <input> de la etiqueta.
Por supuesto puedo usar una vista personalizada, pero hacerlo dentro del localStorage también se guardará la etiqueta de etiqueta dentro del objeto, aunque me gustaría evitarlo, porque cuando exporto todo el código canvas solo espero tener
'''json { "entrada": [ {"label": "lblValue"}, {"valor": "valorRasgo"} ] }
He intentado modificar cómo se renderizan los componentes dentro de la vista, haciendo algo parecido a lo siguiente.
'''javascript
Vista: {
init() {
this.listenTo(this.model, 'change:attributes', this.updateComponentView);
},
onRender() {
this.updateComponentView();
},
updateComponentView() {
const { attributes } = this.model.attributes;
if (!this.el.parentNode.querySelector('#${this.model.cid}')) {
const newDOM = '
<label id="${this.model.cid}" class="inputLabel" data-customelement>
${attributes.label}
';</label>
this.el.parentNode.append(replaceDOM(newDOM), this.el);
}
const label = this.el.parentNode.querySelector('#${this.model.cid}');
label.style.pointerEvents = 'ninguno';
this.el.value = attributes.fieldLabel;
this.el.placeholder = attributes.fieldLabel || attributes.name;
label.innerText = '${attributes.name} ${(attributes.required) ? ' *' : ''}`;
},
Funciona, pero cuando arrastro otros bloques dentro del lienzo y recargo la página, los componentes de entrada ya no están en el orden correcto. Creo que es porque al añadir nuevos nodos dentro del lienzo, las uvas no pueden calcular el orden correcto.
¿Alguna sugerencia sobre cómo manejar este caso?
Gracias
Respuestas (3)
creo que es que, al añadir nuevos nodos dentro del lienzo, las uvas no pueden calcular el orden correcto.
Correcto, el orden se basa en componentes del modelo, no en la vista. Entonces, para que quede claro, eso de '<label>' que añades en 'updateComponentView' es solo para el lienzo y no lo necesitas en tu estructura JSON, ¿correcto?
Este asunto se ha cerrado automáticamente porque no ha recibido respuesta a nuestra solicitud de más información por parte del autor original. Con solo la información que actualmente hay en el asunto, no tenemos suficiente información para actuar. Por favor, contacta con nosotros si tienes o encuentras las respuestas que necesitamos para que podamos investigar más a fondo.
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 #1255
[PREGUNTA]: ¿Cómo configurar el contenido html del editor a partir de un componente personalizado?
Estoy teniendo problemas para que un bloque+componente personalizado muestre su plantilla HTML dentro del editor de uvas. Dentro del HTML e...
Issue #1047
[BUG] El modelo no puede cambiar después de cambiar el valor en el menú desplegable Seleccionar personalizado.
Hola, Estoy usando el enlace CDN para uvas JS de unpkg.com En mi proyecto, he usado un rasgo personalizado como menú desplegable de selecci...
Issue #1693
[BUG|/PREGUNTA] Caracteres extraños (Â) dentro de la vista previa CSS/HTML; Los elementos no se eliminan completamente
BICHO¿Estás usando la última versión (las versiones anteriores NO son compatibles)?0.14.50¿Te enfrentas al error con tu copia local de Grap...
Issue #2008
[Pregunta]El lienzo se vuelve oscuro e inmodificable al añadir un gran fragmento de html personalizado.
Solía añadir html personalizado con 'editor.addComponent()'. Funciona bien la mayor parte del tiempo, pero cuando intento insertar un gran...
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 →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.