Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    This si riferisce a istanza solo se assegnato ad una var

    Salve a tutti.
    Sto cercando di modificare il tema di default di uno slideshow javascript, Galleria.
    Volendo aggiungere un bottone fullscreen sono andato a modificare il js del tema così
    codice:
    (function($) {
    
    /*global window, jQuery, Galleria */
    
    Galleria.addTheme({
        name: 'classic',
        author: 'Galleria',
        css: 'galleria.classic.css',
        defaults: {
            transition: 'slide',
            thumbCrop:  'height',
    
            // set this to false if you want to show the caption all the time:
            _toggleInfo: true
        },
        init: function(options) {
    
            Galleria.requires(1.33, 'This version of Classic theme requires Galleria 1.3.3 or later');
    
            // add some elements
            this.addElement('info-link','info-close');
            this.append({
                'info' : ['info-link','info-close']
            });
    
            // ********* PERSONALIZZAZIONI MIE -4JAVIER- **********
    
    
            this.addElement('functions','pop-out','full-screen');
            this.append({
                'thumbnails-container' : 'functions'
            });
            this.append({
                'functions': ['full-screen','pop-out']
            });
            
            this.$('full-screen').click(function() {
               this.toggleFullscreen();
            });
    La console di firefox solleva questo errore
    TypeError: this.toggleFullscreen is not a function
    Se invece apporto questa modifica alle ultime righe del mio codice
    codice:
    var prova = this;
            this.$('full-screen').click(function() {
                prova.toggleFullscreen();
            });
    tutto funziona perfettamente. Vorrei capirne il motivo. Se necessario posso postare il codice di Galleria.addTheme o altro.

  2. #2
    https://developer.mozilla.org/en-US/...Operators/this

    Semplicemente il context della callback è diverso dal context al di fuori della callback. Fai un console.log(this) fuori e dentro la callback e ne vedi la differenza.

    A occhio, il context fuori è il tuo oggetto galleria, dentro la callback, essendo essa chiamata dal click event di jquery il context è il DOM object sul quale il click è avvenuto.

    Assegnando this a prova e usando poi prova all'interno della callback stai creando una closure: https://developer.mozilla.org/en-US/...Guide/Closures
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Grazie per la risposta chiara ed esauriente e per i link utilissimi.
    Ammetto di non conoscer MDN, il poco che ho studiato su JS l'ho preso da w3schools, ma è passato qualche mese e mi sono arruginito.
    Credo che mi rivedrete a breve su questo forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.