Issue #494💬 RespondidoAbierto el 8 de noviembre de 2017por z-vrReacciones 0

Colocar el bloque como componente programáticamente

Respuesta rápidapor z-vr

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)

z-vr8 de noviembre de 2017

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});

z-vr8 de noviembre de 2017

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!

artf8 de noviembre de 2017

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.

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.