No se puede crear un nuevo componente de botón
Vale, después de probar un poco más, parece que la estructura de los componentes es correcta, pero el bloque de botones no funcionaba correctamente. Así que el bloque de botones era así: Al arrastrar este bloque al lienzo, no se reconoció como un componente de botón. Sin embargo, cuando lo cambié a esto: Entonces func...
Lee la respuesta completa abajo ↓Pregunta
Me está costando crear un nuevo componente para un <button> elemento. ¿Qué me estoy perdiendo? ¿Hay algún fallo aquí? Funciona bien si lo cambio a un elemento '<input>':
comps.addType('button', {
model: defaultModel.extend({
defaults: Object.assign({}, defaultModel.prototype.defaults, {
Arrastrable: Cierto,
Droppable: falso,
Rasgos: [
'prueba'
]
})
},{
isComponent: (el) => {
si (el.tagName === 'BOTÓN') {
return {tipo: 'botón'}
}
},
}),
});
Respuestas (3)
Vale, después de probar un poco más, parece que la estructura de los componentes es correcta, pero el bloque de botones no funcionaba correctamente. Así que el bloque de botones era así:
window.editor.BlockManager.add('button', {
atributos: {
Clase: 'FA Fa-Cube'
},
Categoría: 'Básico',
etiqueta: 'Botón',
Contenido: {
Arrastrable: Cierto,
Droppable: Cierto,
contenido: '<tipo de botón="botón" clase="btn btn-primary">Más información</button>',
}
});
Al arrastrar este bloque al lienzo, no se reconoció como un componente de botón. Sin embargo, cuando lo cambié a esto:
window.editor.BlockManager.add('button', {
atributos: {
Clase: 'FA Fa-Cube'
},
Categoría: 'Básico',
etiqueta: 'Botón',
contenido: '<tipo de botón="botón" clase="btn btn-primary">Más información</button>',
});
Entonces funciona bien. ¿Es esto un error o es intencionado? No encuentro nada en la documentación que explique por qué funcionaría así.
Creo que el problema aquí es un malentendido de la clave de 'contenido'.
Cuando declaras un bloque
'''js
editor. BlockManager.add('button-block', {
// ...
Contenido: {
tipo: 'botón',
Droppable: falso,
atributos: {
título: 'Hola',
Tipo: 'someter',
},
},
});
El 'contenido' es para el Componente, como una cadena o como un objeto.
La versión en cadena del ejemplo anterior sería:
'''js
editor. BlockManager.add('button-block', {
// ...
contenido: '<botón data-gjs-droppable="false" type="submit" title="Hola"></button>',
});
Pero cuando usas 'content' dentro de un Componente, indica el uso de contenido estático (por ejemplo, como el que se usa en RTE), así que el editor no lo analizará y en el JSON se almacenará como cadena. Así que este objeto componente: '''js { Arrastrable: Cierto, Droppable: Cierto, contenido: '<tipo de botón="botón" clase="btn btn-primary">Más información</button>', }
generará este HTML
'''html
<div>
<tipo de botón="botón" clase="btn btn-primary">Más información</button>
</div>
donde el 'botón' no está analizado y no podrás seleccionarlo desde el editor. Si quieres que el editor analice la cadena de botones, usa esto: '''js { Arrastrable: Cierto, Droppable: Cierto, componentes: '<tipo de botón="clase"btn btn-primary">Más información</button>', }
que después del analizador se convertirá
'''js
{
Arrastrable: Cierto,
Droppable: Cierto,
Componentes: [
{
tipo: 'botón',
...
}
],
}
Así que el HTML será el mismo, pero el editor lo verá como un componente y no solo como una cadena
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 #1959
[Pregunta] Editar innerHTML en un botón personalizado
Hola a todos, Estoy intentando cambiar el texto en un componente de botón, pero no consigo editarlo. He añadido este tipo: Incluí el paráme...
Issue #709
isComponent no está devolviendo el rasgo
¡Feliz año nuevo! Estoy teniendo un problema con 'isComponent()'. Aquí está mi código: Por alguna razón, la única vez que el rasgo aparece...
Issue #1929
Carga el gestor de activos, pero los activos no funcionan
Estoy usando el icono del lápiz para activar el gestor de activos. El disparador funciona bien, pero cuando hago clic en cualquiera de las...
Issue #1995
[PREGUNTA] Los eventos vinculados no se están cargando (simplemente funcionan correctamente en Mozilla Firefox)
Así que estoy usando almacenamiento local. He añadido algunos eventos al componente de esta manera. Cada vez que añado el componente funcio...
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 →Tutoriales relacionados
Guías detalladas sobre el mismo tema.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.