Issue #2808💬 RespondidoAbierto el 27 de mayo de 2020por robertrafReacciones 1

Componente de tipo personalizado en entorno de producción

Respuesta rápidapor Ju99ernaut1

'onRender' simplemente especifica qué debe ocurrir cuando colocas con éxito un componente en el lienzo, mientras que 'script' es código que se generará en tu html dentro de las etiquetas 'script'. Algo así como: '''html <script> //... var items = document.querySelectorAll('#someid'); para (var i = 0; len = items.lengt...

Lee la respuesta completa abajo ↓

Pregunta

Hola, tengo una pregunta: cuando creo un componente de tipo personalizado desde el editor, ¿cuál sería el siguiente paso para mostrar ese componente en mi aplicación? Actualmente estoy guardando los datos de los componentes en Firebase con el plugin firestore y los atributos almacenados en el objeto son los siguientes: gjs-assets, gjs-components, gjs-css, gjs-html y gjs.styles.

¿Qué seguiría si quiero usar estos componentes en mi entorno de producción? ¿Debería usar un framework o biblioteca de JavaScript? O quizá el mismo editor de uvas sin la posibilidad de editar, gracias.

Respuestas (3)

Ju99ernaut31 de mayo de 2020

'onRender' simplemente especifica qué debe ocurrir cuando colocas con éxito un componente en el lienzo, mientras que 'script' es código que se generará en tu html dentro de las etiquetas 'script'.

Algo así como: '''html

<script> //... var items = document.querySelectorAll('#someid'); para (var i = 0; len = items.length; i < len; i++) { (función(){ versión minificada del script en la definición de componentes })() } //... </script>
Ju99ernaut28 de mayo de 2020

Creo que en un entorno de producción solo necesitas el código html y css generado por 'grapesjs'.

robertraf30 de mayo de 2020
Fragmento de códigoTEXT
Entiendo esa parte, pero si quiero renderizar el componente que he creado no funciona. Lo explicaré un poco, he creado un tipo de componente que renderiza datos desde un endpoint, pero si uso código html y css no funciona.

Tipo de componente personalizado
'editor. DomComponents.addType('group', {
        modelo: {
            Predeterminados: {
                El nombre de la etiqueta que se usará en el código final
                etiquetaNombre: 'div',
                Atributos: "",
                Usarías rasgos para personalizar propiedades personalizadas
                Rasgos: [
                    {
                        tipo: 'select',
                        cambioProp: 1,
                        nombre: 'customProp',
                        Opciones: []
                    }
                ]
            },
            init() {
                sea trait_customProp = this.get('traits').where({ name: 'customProp' })[0];
                trait_customProp.set('options', start_options);
                si (Object.keys(this.getAttributes()).length === 0) {
                    console.log("Objeto init vacío");
                } else {
                    trait_customProp.set('value', this.getAttributes().value);
                }
                this.on('change:customProp', () => this.view.onRender());
            }
        },
        Vista: {
            Por ejemplo, Puedes personalizar la etiqueta en el lienzo
            Por defecto, la vista usará la misma etiqueta que el modelo
            etiquetaNombre: 'div',

async onRender() {

Recuperación del valor de rasgo

sea trait_value = this.model.get('traits').where({ name: 'customProp' })[0].attributes.value;

si (trait_value === "") {
                    console.log("El valor del atributo es vacío");
                } else {
                    console.log('Valor del atributo: ${trait_value}');
                    this.model.addAttributes({ value: trait_value });

Datos de renderizado
                    try {
                        para (opción de start_options) {
                            si (Number(trait_value) === opción.value) {
                                esto.$el.vacío();
                                let response = await axios.get('http://localhost:8100/dmxConnect/api/documents/retrieveXcollection.php?idcollection=${trait_value}');
                                this.model.addAttributes({ data: response.data.query1 });
                                si (response.data.query1.length > 0) {
                                    ¡Muchos datos, incomprensible!
                                    this.model.getAttributes().data.forEach(res => {
                                        JSON.parse(res.data).forEach(doc_data => {
                                            console.log(doc_data.userData); 
                                            this.$el.append('<h1>' + doc_data.userData[0] + '</h1>');
                                        });
                                    });
                                } else {
                                    this.$el.append('<h1>404 ${option.name}</h1>');
                                }
                            }
                        }
                    } captura (e) {
                        console.log(e);
                    }
                }

}

}
    }
    );

Un bloque para el tipo de grupo
    editor. BlockManager.add('test-render', {
        etiqueta: 'Render de prueba',
        Contenido: {
            Tipo: 'Grupo'
        },
        categoría: 'Personalizado'
    });`

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.