Issue #3626💬 RespondidoAbierto el 16 de julio de 2021por san-123Reacciones 0

¿Cómo configurar el src de la etiqueta de vídeo en dinámica?

Respuesta rápidapor stf1981

Creo que tengo algo así hecho con un componente personalizado. Quizá ayude

Lee la respuesta completa abajo ↓

Pregunta

Hola @artf,

Hola, tengo la etiqueta de vídeo y el botón de arrastrar y soltar desde blockmanager. Al hacer clic en el botón, necesito cambiar la URL a src. Pero no funciona, por favor, guíame.

editor. BlockManager.add("html/video", { Etiqueta: '<div>

Fragmento de códigoTEXT
<img src="../.../../Images/SiteBuilder/video.svg"/>
                      <div class="mi-etiqueta-bloque">Vídeo</div>
                    ',</div>
            categoría: 'Controles de la interfaz',
            tabulación: 'Controles de la interfaz',
            id: 'Controles de la interfaz',
            contenido: '<video id="video1" src="..../../../Images/Jotun/Media21-1.m4v"id="TestVideo" controles type="video/mp4">',
        });

Evento de botones: 
 va url = ".. /.. /test.mp4";
 $("#video1").attr('src', URL);

No se aplica, dime cómo se puede establecer de otra manera.

Respuestas (4)

stf198122 de julio de 2021

Creo que tengo algo así hecho con un componente personalizado. Quizá ayude

"usar estricto";

const videowithupload = (editor) => {
    editor. DomComponents.addType("videowithupload", {
        isComponent: (el) => {
        console.debug(el);
        // },
        modelo: {
            Predeterminados: {
                etiquetaNombre: 'vídeo',
                reproducción automática: Cierto,
                LOOP: Cierto,
                Silenciado: Cierto,
                Controles: falso,
                Cartel: "poster.png",
                src: "",
                arrastrable: falso,
                removible: falso,
                copiable: falso,
                redimensionable: falso,
                estilable: [],
                Rasgos: []
            },
            init() {
                console.debug("vídeo - modelo - init");
            },
            updated(property, value) {
                consola.debug(propiedad);
                console.debug(value);
                console.debug(prevValue);

si (propiedad === "src")
                    this.set("src", valor);
            }
        },
        Vista: {
            eventos: {
                dblclick: "onActive"
            },
            init() {
                console.debug("vídeo - ver - init");
                const { modelo } = esto;

props const = [
                    'bucle',
                    'reproducción automática',
                    'controles',
                    'color',
                    'rel',
                    'modestbranding',
                    'cartel'
                ];
                eventos const = props.map(p => 'change:${p}').join(' ');

this.listenTo(model, 'change:src', this.updateSrc);
                this.listenTo(modelo, eventos, this.updateVideo);
            },
            onRender() {
                console.debug("vídeo - ver - onRender");
                
this.updateVideo();
            },
            updateVideo(){
                const { model, el } = this;

el.loop = model.get('loop');
                el.autoplay = model.get('autoplay');
                el.controls = model.get('controls');
                el.poster = model.get('cartel');
            },
            updateSrc() {
                console.debug("vídeo - ver - updateSrc");

const { model, el } = this;
                si (!el) regresa;

Sea src = model.get('src');
                el.src = src;
            },
            onActive(e) {
                console.debug("vídeo - ver - onActive");

editor.runCommand('open-assets', {
                    Objetivo: esto.modelo,
                    Tipos: ['Vídeos'],
                    aceptar: 'vídeo/*',
                    onSelect() {
                        console.debug("vídeo - subido - onSelect")
                        editor. Modal.close();
                        editor. AssetManager.setTarget(null);
                    }
                });

e.stopPropagation();
            }
        },
    });
}

exportar vídeo predeterminado con subida;
artf29 de julio de 2021

Si solo necesitas actualizar el contenido del bloque (por ejemplo, el cambio se aplicará a bloques nuevos arrastrados), puedes cambiarlo de esta manera: '''js bloque const = editor. BlockManager.get('html/vídeo'); block.set('content', '<vídeo ...>')

si necesitas cambiar Componentes en el lienzo, te recomendaría leer más en detalle [Componentes](https://grapesjs.com/docs/modules/Components.html)
san-12330 de julio de 2021

Gracias @artf y stf1981 por vuestra respuesta. De hecho, arrastro y suelto varios vídeos con el atributo generado de número aleatorio a id. En este caso, ¿cómo actualizar el vídeo seleccionado específico de SRC?

No me han fallado la actualización src.

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @san-123.

Buena pregunta sobre ¿Cómo configurar el src de la etiqueta de vídeo en dinámica?. El enfoque recomendado con GrapesJS es usar la API orientada a eventos.

Empieza aquí:

  1. Consulta la documentación de GrapesJS de tu módulo específico
  2. Busca el método del oyente de eventos 'on()'
  3. La mayoría de las operaciones se pueden realizar escuchando eventos del editor y de los componentes

Patrones comunes: '''javascript Prestad atención a los cambios editor.on('Change', () => console.log('Something Changed'));

Ciclo de vida de los componentes editor.on('component:mount', (c) => console.log('component ready', c)); editor.on('component:update', (c) => console.log('component updated', c));


**Si sigues atascado:**
- Compartir una reproducción mínima de CodeSandbox
- Incluye lo que ya has probado
- Menciona tu versión GrapesJS
- ¡La comunidad está aquí para ayudar!

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.