Issue #2650💬 RespondidoAbierto el 14 de marzo de 2020por abzal0Reacciones 2

Slick.js recargar el control deslizante al cambiar el recurso de imagen

Respuesta rápidapor pouyamiralayi1

Hola @abzal0 la función correcta es en realidad ''updateScript'', ¡mi error! Así es como lo hice: Primero, definiendo el tipo de componente: Cada vez que se ejecuta el script, reinicio el ''slickjs'' para reinicializar, que puedes ver en el script. También he usado el tipo ''image'' directamente como hijos de mi compo...

Lee la respuesta completa abajo ↓

Pregunta

Hola a todos, Estoy integrando el deslizador slick, el problema es recargar el deslizador después de subir la imagen.

Después de hacer clic en activos abiertos, el deslizador Slick debe reinicializarse para que el HTML normal del deslizador se convierta en el deslizador slick, que ocurre al añadir el componente al lienzo solo: $('#slickslider').slick({ DOTS: Cierto,

Infinito: Cierto, velocidad: 300, flechas: cierto, AdaptativoAltura: verdadero

Fragmento de códigoTEXT
});

Eso funciona en dos casos:
Cuando añado un nuevo deslizador al lienzo
Cuando subo una nueva imagen y luego arrastro y muevo el componente, se reinicializa 

El código:

editor. DomComponents.addType('slickslider', {
modelo: {
          init() {
        
PRUEBAS 
               this.listenTo(this, 'change:attributes', model =>{
                                        $('#slickslider').slick({
       DOTS: Cierto,
   
Infinito: Cierto,
    velocidad: 300,
    flechas: cierto,
    AdaptativoAltura: verdadero
       
}); 
               })
Sin resultados
               
},

Predeterminados: {
         Componentes: [	
				{
					Resaltable: Cierto,
					Editable: Cierto,
					Seleccionable: Cierto,
					redimensionable:true
				}],
				
Rasgos: [
      
{
						    	tipo: 'Carrusel de botones',
						    	etiqueta: 'Subir',
							Nombre: 'upload1',
						    
valor:'Upload 1',
		
},
							
{
							tipo: 'select',
							etiqueta: 'reload',
							Nombre: 'Reload',
						
Opciones:[{
						    valor: 'sí',
						    Nombre: 'Sí'
						},{
						    valor: 'no',
						    Nombre: 'No'
						}],
						
cambioProp: 0
						}
					
]}},
    
Vista:{
            
etiquetaNombre: 'div',
			init({ model }) {

$('#slickslider').slick({
       DOTS: Cierto,
   
Infinito: Cierto,
    velocidad: 300,
    flechas: cierto,
    AdaptativoAltura: verdadero
       
}); 

RESULTADO: ignora este código 
		    
this.model.listenTo(this.model, 'change:attributes', model => {
					this.render();
				}); RESULTADO: no funciona

editor.render(); Rompe el editor
			}
        }
        
}
)
    
editor. BlockManager.add('slickslider', {
		etiqueta: 'Slick Slider',
		categoría: 'Medios',
		atributos: { icon: 'fa fa-video' },
		Contenido: {
		    
Tipo: 'Deslizador Slicks',
			activeOnRender: 1,
								 estilo: {
      'color de fondo': '#000000',
    },
		    script: function(){
		        
var initMySLider = function() {
  
$('#slickslider').slick({
       DOTS: Cierto,
   
Infinito: Cierto,
    velocidad: 300,
    flechas: cierto,
    AdaptativoAltura: verdadero
       
});
   
}
  
var script = document.createElement('script');
    script.onload = initMySLider;
    script.src = '//cdn.jsdelivr.net/npm/[email protected]/slick/slick.min.js';
    document.body.appendChild(script);
    
var link = document.createElement('link');
    link.rel = 'hoja de estilo';
    link.type = 'texto/css';
    link.href = 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.css';
    
var link2 = document.createElement('link');
    link2.rel = 'hoja de estilo';
    link2.type = 'texto/css';
    link2.href = 'https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.css';
    
document.body.appendChild(enlace);
document.body.appendChild(link2);

},
		    
Contenido: '<div id="slickslider" data-gjs-type="slickslider"> <div class="slide" id="slide1"> <img src="oldimage1.png" > </div><div class="slide" id="slide2"> <img src="oldimage.png" > </div></div>'
   
}	});

})

Resultado:
Tras subir una nueva imagen, ambas imágenes se muestran como un html normal:

! [imagen](https://user-images.githubusercontent.com/5952350/76681522-3cddd380-660d-11ea-8487-b0962bdc3e8c.png)

Después de mover el componente hacia arriba, se convierte en un deslizador js pulido que muestra:
nueva imagen subida e imagen antigua como deslizador
Mostrando flechas JS elegantes 

! [imagen](https://user-images.githubusercontent.com/5952350/76681520-38b1b600-660d-11ea-9532-3fe2e0c45337.png)

Cualquier sugerencia sería de ayuda. 

Resumen: 

¿Cómo reiniciar la función 'script' dentro de editor.blockmanager.add para recargar el código jquery de Slider?

Respuestas (3)

pouyamiralayi18 de marzo de 2020

Hola @abzal0 la función correcta es en realidad ''updateScript'', ¡mi error! Así es como lo hice:

Primero, definiendo el tipo de componente:

    domc.addType('slick-type', {
        modelo: {
            Predeterminados: {
                CCID: '',
                etiquetaNombre: 'div',
                redimensionable: cierto,
                Componentes: [
                    {
                        tipo: 'imagen',
                    },
                    {
                        tipo: 'imagen',
                    }
                ],
                script: función () {
                    Id de const = '{[ ccid ]}'
                    try {
                        $('#' + id).slick('unslick');
                    } captura (e) {
                    }
                    $('#' + id).slick({
                        DOTS: Cierto,
                        Infinito: Cierto,
                        velocidad: 300,
                        flechas: Cierto,
                        AdaptativoAltura: verdadero
                    })
                }
            },
        },
        Vista: {
            init() {
                const ccid = this.model.ccid
                this.model.set('ccid', ccid)
                const viewObj = esto
                const am = editor. Gestor de Activos;
                const tImageView = am.getType('image').view;
                am.addType('image', {
                    Vista: {
                        onClick() {
                            tImageView.prototype.onClick.apply(this);
                            viewObj.updateScript()
                            this.em.get('Modal').close();
                        },
                    }
                })
            }
        }
    })

Cada vez que se ejecuta el script, reinicio el ''slickjs'' para reinicializar, que puedes ver en el script. También he usado el tipo ''image'' directamente como hijos de mi componente, así que no tengo que llamar manualmente al comando ''open-assets'' en un rasgo personalizado. Por último, he sobrescrito el evento ''onClick'' del gestor de activos para llamar a nuestro script. ¡Salud!

abzal018 de marzo de 2020

@pouyamiralayi este código es increíblemente valioso, muchas gracias por compartirlo :) funciona mejor de lo que necesitaba. Te enviaré un correo electrónico, espero que respondas.

pouyamiralayi14 de marzo de 2020

@abzal0

cómo reiniciar la función 'script' dentro de editor.blockmanager.add para recargar el código jquery del slider?

Para tu código ''script'', te sugiero que lo muevas a la definición de componente y ahí puedes emitir:

this.view.updateScript()

Para recargas de scripts. ¡Salud!

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.