Error al incluir un componente personalizado dentro de otro bloque
Viendo que tu comentario corrigió el error original que encontré, cerraré este comentario y publicaré uno aparte para mis preguntas sobre el uso de la propiedad droppable.
Lee la respuesta completa abajo ↓Pregunta
Perdón por el título tan vago. No sé cómo describirlo de forma concisa. Tengo un bloque personalizado donde quiero restringir que solo se puedan colocar imágenes en una parte concreta del bloque. Probé algo así:
comps.addType('image-container', {
model: defaultModel.extend({
Extender propiedades predeterminadas
defaults: Object.assign({}, defaultModel.prototype.defaults, {
Solo puede dejar caer estos elementos dentro de él
Droppable: "IMG",
}),
},
{
isComponent: function(el) {
if(el.tagName == 'DIV' && $(el).hasClass("image-container")){
return {type: "image-container"};
}
},
})
});
blockManager.add('test-with-image-container', {
etiqueta: 'Bloque de prueba con contenedor de imagen',
Atributos: {Clase:'FA FA-lápiz'},
contenido: '<div class="test-block">Puedes dejar una imagen abajo:<div class="image-container"></div></div>',
categoría: 'Bloques',
});
Sin embargo, cuando hago esto, intentar arrastrar el bloque fuera de la paleta de bloques genera el siguiente error:
... grapes.min.js:2 Tipo no capturadoError: s no es un constructor en F.i.addToCollection (VM6196 grapes.min.js:2) en VM6196 grapes.min.js:2 en Function.C.each.C.forEach (VM6196 grapes.min.js:2) at F.i.each (VM6196 grapes.min.js:2) at F.i.render (VM6196 grapes.min.js:2) en F.i.renderChildren (VM6196 grapes.min.js:2) at F.i.render (VM6196 grapes.min.js:2) en F.i.addToCollection (VM6196 grapes.min.js:2) at F.i.addTo (VM6196 grapes.min.js:2) at y (VM6196 grapes.min.js:2) ...
¿Algún consejo? ¿Hay una forma mejor de lograr lo que quiero hacer?
¡Gracias!
Respuestas (3)
Viendo que tu comentario corrigió el error original que encontré, cerraré este comentario y publicaré uno aparte para mis preguntas sobre el uso de la propiedad droppable.
La 'vista' es obligatoria cuando defines un nuevo tipo de Componente '''js comps.addType('image-container', { modelo: defaultModel... view: defaultView; });
¡Gracias! Añadir la Vista por defecto sí eliminó el error, pero sigo sin poder hacer lo que quiero: no consigo dejar una imagen dentro de la parte de "contenedor de imágenes" del ejemplo anterior. Cuando intento dejar el componente de imagen ahí, se inserta en el "bloque de prueba" que lo contiene en su lugar.
Mi código de prueba ahora es:
comps.addType('image-container',
{
model: defaultModel.extend(
{
Extender propiedades predeterminadas
por defecto: Object.assign({}, defaultModel.prototype.defaults,
{
Solo puede dejar caer estos elementos dentro de él
Droppable: "IMG",
}),
},
{
isComponent: function(el)
{
if(el.tagName == 'DIV' && $(el).hasClass("image-container"))
{
return {type: "image-container"};
}
},
}),
view: defaultView
});
blockManager.add('test-with-image-container',
{
etiqueta: 'Bloque de prueba con contenedor de imagen',
Atributos: {Clase:'FA FA-lápiz'},
contenido: '<div class="test-block">Puedes dejar una imagen abajo:<div class="image-container"></div></div>',
categoría: 'Bloques',
});
¿Estoy usando mal la propiedad de "droppable"? Solo tiene que ser un selector CSS, ¿verdad?
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #2061
[PREGUNTA] Cómo colocar un componente al final del lienzo.
¿Cómo puedo poner mi zapata al final del lienzo? Quiero que el editor no permita colocar un bloque o widget debajo del pie de página. Ejemp...
Issue #1424
El valor del rasgo de casilla se muestra de forma diferente en vista (render()) frente al modelo (getHtml())
Tengo un componente personalizado con un rasgo de casilla de verificación 'mostrar-nombre'. Cuando el valor del rasgo es 'true', el compone...
Issue #484
¿Puedo restringir qué bloques se pueden colocar en un contenedor?
Mi intención es crear un bloque que permita que solo se dejen caer componentes de imagen (estoy usando el predeterminado de uvapes-blocks-b...
Issue #577
Solo permite un componente de tipo específico en el editor
¿Hay alguna forma de no permitir que ningún componente específico se deshaga más de una vez en la página? Tengo un componente personalizado...
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.