Componente de tipo personalizado en entorno de producción
'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)
'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>Creo que en un entorno de producción solo necesitas el código html y css generado por 'grapesjs'.
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.
Issue #3337
Pregunta: Usa las flechas para mover bloques en el lienzo configurado en modo de posicionamiento absoluto
Hola, estoy creando una solución para que los estudiantes cuenten sus experiencias en el instituto como diapositivas hechas desde el editor...
Issue #3044
[PREGUNTA]: El nuevo botón de barra de herramientas solo funciona para componentes añadidos nuevos y no para los existentes
Hola a todos, ¿alguien puede explicarme por qué cuando creo un nuevo botón personalizado en la barra de herramientas, este botón solo apare...
Issue #1652
En React, ¿cómo se puede dar un camino local de CSS para el editor de grapesjs?
Como estoy trabajando en Reactjs con grapesjs, quiero cargar una plantilla html en grapesjs. ¿Tengo una carpeta CSS separada en mi aplicaci...
Issue #3215
Problemas de carga de contenido desde una base de datos remota
Hola, Creé Grapejs Pagebuilder. Tengo dos enlaces, uno para Pagebuilder1 y otro para PAgeBuilder2. Ambos se redirigen al editor grpaejs y c...
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.