Colocar el bloque como componente programáticamente
Ah, descubrí cómo hacerlo — a través de 'editor.addComponents({ type: 'MyComponent' })'. ¿Hay alguna forma de insertarlo en un elemento específico mediante un selector CSS? He encontrado este fragmento, pero ¿cómo podría encontrar el índice correcto? '''js editor.getComponents().add('<div>Text</div>', {at: index}); ```
Lee la respuesta completa abajo ↓Pregunta
He creado un tipo personalizado y un bloque
'''js DomComponents.addType('MyComponent', { ... }); BlockManager.add('Component', { content: { type: 'MyComponent' } });
¿es posible insertarlo en 'DomComponents' por nombre o por cualquier otro medio? No quiero tener que arrastrar y soltar el bloque manualmente cada vez. Gracias.
Respuestas (3)
Ah, descubrí cómo hacerlo — a través de 'editor.addComponents({ type: 'MyComponent' })'. ¿Hay alguna forma de insertarlo en un elemento específico mediante un selector CSS?
He encontrado este fragmento, pero ¿cómo podría encontrar el índice correcto? '''js editor.getComponents().add('<div>Text</div>', {at: index});
Vale, lo que he hecho es '''js función de exportación por defecto iterateChildren(components, fn) { components.each((model) => { fn(modelo); const childComps = model.get('components'); iterateChildren(childComps, fn); }); }
función export findModels(components, selector) { const encontrado = []; iterateChildren(components, (model) => { const { view } = modelo; si (!view) { regresar; } const { el } = vista; coincidencias const = el.matches(selector); si (coincide) { found.push(modelo); } }); se encontró la devolución; }
y luego
'''js
const wrapper = DomComponents.getWrapper();
const models = findModels(wrapper.get('components'), '#hero .text');
models.forEach((model) => {
componentes const = model.get('components');
components.add({ type: 'ContainerPlugin' }, { at: 0 });
});
Creo que recorrer el árbol de modelos sería una muy buena característica — trabajaré en el PR en algún momento. ¡Salud!
De hecho, puedes obtener el modelo desde la instancia de cash element con 'view.$el.data('model')', así que podrías hacerlo funcionar con menos código '''js wrapper.view.$el.find('#hero .text').each((el, i, $el) => console.log($el.data('modelo')) )
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #459
Error al incluir un componente personalizado dentro de otro bloque
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 p...
Issue #1155
Componente personalizado usado como HTML en bloque
He ampliado el componente de imagen por defecto '''js Export default (editor) => { const domComponents = editor. DomComponents; const image...
Issue #862
Plugin Jquery Image Viewer en el bloque personalizado de GrapesJs
Quiero integrar el plugin jquery del visor de imágenes en el nuevo bloque personalizado de grapesj, pero el código jquery no lo reconoce. ¿...
Issue #917
[PREGUNTA] Propiedades de estilo personalizado por elemento
¿Es posible tener una interfaz de propiedad personalizada por elemento? Por ejemplo, considera que quiero que el tamaño de fuente se muestr...
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.