Issue #3060💬 RespondidoAbierto el 1 de octubre de 2020por revdfdevReacciones 0

HAZAÑA: No se muestra ningún ejemplo para extender un tipo de imagen similar a un componente

Respuesta rápidapor artf

Extiendes la imagen como cualquier otro componente, se explica aquí. Si tienes un caso de uso concreto, depende de ti mirar el origen de la implementación del componente

Lee la respuesta completa abajo ↓

Pregunta

No hay ejemplos para componentes como extender tipos de imágenes, la documentación parece un poco difícil de entender y comprender; si hay ejemplos para personalizar un tipo de imagen o el subidor de imágenes para un componente separado, sería bueno, porque tenemos un caso de uso en mi proyecto.

Respuestas (3)

artf10 de octubre de 2020

Extiendes la imagen como cualquier otro componente, se explica aquí. Si tienes un caso de uso concreto, depende de ti mirar el origen de la implementación del componente

abulka8 de febrero de 2021

Me enfrento a la misma dificultad que @revdfdev: al seguir el ejemplo de la documentación para ampliar un componente existente, me cuesta comprender. Por ejemplo, la documentación dice: '''javascript comps.addType('my-new-component', { isComponent: el => {/* ... */}, extiende: 'otro-componente-definido', model: { ... }, // Extenderá el modelo desde 'other-defined-component' vista: { ... }, // Extenderá la vista desde 'otro-definido-componente' });

¿qué se pone en el '{ ... }`? Esto nunca se explica, solo un montón de puntos.  Si defino 'modelo' como
'''javascript
modelo: {
    Predeterminados: {
        Rasgos: [
            'otro',
            'Fred',
    ],
    }
}

Entonces los rasgos existentes 'id' y 'título' se destruyen, nada se 'extiende'. Por ejemplo, quiero preservar la característica predeterminada de 'id' asignada automáticamente, a menos que establezca explícitamente su valor. Si vuelvo a implementar 'id', tendría que averiguar cómo hacerlo yo mismo otra vez.

Hay muy pocos, si es que hay alguno, ejemplos de usar 'extender'; todos los ejemplos que encuentro usan este tipo de técnica, por ejemplo, este ejemplo: '''javascript var domComps = editor. DomComponents; dType = domComps.getType('default'); dModel = dType.model; dVista = dTipo.vista;

domComps.addType('input', { model: dModel.extend({ defaults: Object.assign({}, dModel.prototype.defaults, { rasgos: dModel.prototype.defaults.traits.concat([ 'prueba' ]) }) }, { isComponent: function (el) { if (el.tagName == 'ENTRADA') { return { type: 'input' }; } }, }), Ver: dView });

¿Es quizás una técnica antigua que precede a la idea de 'extender'?  Interesante, en el ejemplo anterior, ¿obtengo el atributo 'test' sin declararlo explícitamente?

El único otro ejemplo de usar 'extender' que encontré fue en el #3135 y ejecutando [here](https://codesandbox.io/s/sharp-easley-3hrdn?file=/index.js) y parece muy simple y zen; sin embargo, solo muestra añadir un manejador 'dblclick' al componente de vídeo y no muestra añadir atributos o propiedades y rasgos adicionales del componente.

También he intentado estudiar plugins de componentes existentes, pero no encuentro ninguno que use 'extender'. Por cierto, estudiar plugins publicados supone un nivel adicional de complejidad, ya que están estructurados de forma diferente a un plugin que yo defino sobre la marcha dentro de mi propio proyecto. Me gustaría un ejemplo sencillo de llamar a 'addType' que, por ejemplo, extienda un componente de entrada o texto con atributos y rasgos adicionales, y en mi opinión debería estar en el documento.
artf19 de febrero de 2021

Cuando extiendes las propiedades por defecto, funciona así: '''js Componente A Predeterminados: { Propuesto: 'A', PropositB: [1, 2], }

Componente B, que extiende el Componente A Predeterminados: { El Componente B tendrá propA como Componente A propB: [3, 4], // esto anula completamente el propB }


Si necesitas que propB se fusione con el del Componente A, necesitarías algo así
'''js
const parentProps = domc.getType('parent-type').model.prototype.defaults;
// ...
Predeterminados: {
 Propositorio: [ ... parentProps.traits, 3, 4 ]
}

Interesante, en el ejemplo anterior obtengo la prueba de atributos sin declararlo explícitamente?

Las cadenas recurren a un rasgo de texto simple tipo ''attr-name'' => '{ type: 'text', name: 'attr-name' }'

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 →

Explorar categorías de plugins

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