Añadir componentes personalizados no funciona
En primer lugar, usa la API mejorada. El 'isComponent' solo se activa si necesitas analizar una cadena HTML; si pasas el objeto component (por ejemplo, '{ type: 'input2', }') el análisis no es necesario. No ves nada en el lienzo porque obviamente no hay ningún elemento INPUT2 en HTML5
Lee la respuesta completa abajo ↓Pregunta
He investigado mucho, pero aún así no he podido añadir un componente personalizado. Probé el ejemplo en la documentación oficial (para modificar el comportamiento del elemento "input" y funciona bien). https://grapesjs.com/docs/modules/Components.html#define-new-component
Pero el ejemplo anterior es para modificar el componente existente ("entrada").
Estoy intentando averiguar cómo crear un nuevo componente. A continuación está mi código, pero no funciona (no imprimo nada en consola cuando lo arrastro en el formulario). - ten en cuenta que usé el ejemplo oficial y lo cambié un poco para crear este componente personalizado.
Por favor, ayudadme con qué puedo estar haciendo mal aquí...
comps.addType('input2', { Defina el modelo model: defaultModel.extend({ Extender propiedades predeterminadas defaults: Object.assign({}, defaultModel.prototype.defaults, { Solo puede ser eliminado dentro de elementos de 'forma' arrastrable: 'forma, forma *', No puedes meter otros elementos dentro Droppable: falso,
Rasgos (Escenarios)
}),
},
El segundo argumento de .extend son los métodos estáticos y pondremos dentro de nuestro
método isComponent(). Mientras pones un nuevo tipo de Componente encima de la pila,
No declarar isComponent() probablemente podría romper cosas, especialmente si extiendes
el predeterminado.
{
isComponent: function(el) {
if(el.tagName == 'INPUT2'){
console.log('Estoy en isComponent: el:', el);
return {type: 'input2'};
}
},
}),
Definir la vista
view: defaultType.view.extend({
Eventos de vinculación
eventos: {
Si quieres vincular el evento a elementos infantiles
'haz clic en .someChildrenClass': 'métodoNombre',
clic: 'handleClick',
dblclick: function(){
alerta ('¡Hola!');
}
},
No tiene mucho sentido que este método esté dentro del componente
Pero está bien como ejemplo
randomHex: función() {
return '#' + Math.floor(Math.random()*16777216).toString(16);
},
handleClick: function(e) {
this.model.set('style', {color: this.randomHex()}); <- Afecta al código HTML final
this.el.style.backgroundColor = this.randomHex(); <- No afecta al código HTML final
Consejo: actualizar el modelo reflejará los cambios en la vista, así que, en este caso,
si pones el cambio de modelo después del del DOM, esto sobrescribirá el Color de fondo
Cambios realizados antes
},
El render() debería devolver 'esto'
render: función () {
Extiende el método de renderizado original
defaultType.view.prototype.render.apply(esto, argumentos);
this.el.placeholder = 'Mi texto aquí'; <- No afecta al código HTML final
devuelvo esto;
},
}),
});
Un bloque para el componente personalizado
editor. BlockManager.add('input2', {
etiqueta: 'Mi componente personalizado',
atributos: {
clase:'input2'
},
Contenido: {
Componente de 'mapa' incorporado
tipo: 'input2',
etiquetaNombre: 'INPUT2',
Estilo: { Altura: '350px'},
Una vez insertado, no se puede quitar (solo un ejemplo)
Removible: falso
}
contenido: (<div>Foo</div>),
});Respuestas (1)
En primer lugar, usa la API mejorada. El 'isComponent' solo se activa si necesitas analizar una cadena HTML; si pasas el objeto component (por ejemplo, '{ type: 'input2', }') el análisis no es necesario.
No ves nada en el lienzo porque obviamente no hay ningún elemento INPUT2 en HTML5
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #3119
[PREGUNTA] ¿Cómo crear un bloque personalizado hecho con componentes de grapesjs?
Hola, quiero que me hagan bloques personalizados con componentes de grapesjs. Encontré la solución para añadir componentes: https://github....
Issue #1930
[PREGUNTAS] cambiar 2 atributos con 1 rasgo
Tengo un rasgo de entrada, quiero cambiar los 2 atributos (nombre y tipo) en el elemento seleccionado, en canvas es apropiado, pero en el h...
Issue #3574
Añadir rasgos no es detectado por el gestor de rasgos.
Siguiendo un ejemplo de docs. ¿Hay alguna configuración adicional para que se muestren nuevos rasgos para los elementos? El ejemplo que usa...
Issue #525
Ejemplo de local2 para el almacenamiento que no funciona
Usando el código proporcionado en la documentación. https://github.com/artf/grapesjs/wiki/API-Storage-Manager en ejemplos de "añadir". Esto...
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.