Issue #1888💬 RespondidoAbierto el 13 de marzo de 2019por RobertoCorrealeReacciones 0

Añadir html personalizado dentro de Canvas

Respuesta rápidapor artf

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)

artf22 de marzo de 2019

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?

no-response[bot]1 de abril de 2019

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.

lock[bot]2 de abril de 2020

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 →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.