Issue #1891💬 RespondidoAbierto el 14 de marzo de 2019por jwilson-lyonscgReacciones 0

No se puede crear un nuevo componente de botón

Respuesta rápidapor jwilson-lyonscg

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)

jwilson-lyonscg14 de marzo de 2019

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í.

artf22 de marzo de 2019

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

lock[bot]21 de marzo 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 →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

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