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

    Scope di metodi di oggetti con bind

    Ciao a tutti,
    non riesco a capire una cosa.
    Come mai quando richiamo un metodo di una classe dentro a un bind

    $(document).on("click", oggetto.metodo);

    all'interno di quel metodo non posso richiamare altri metodi dello stesso oggetto tramite this.altrometodo?
    Forse viene richiamato dentro nello scope del bind solo la funzione e non tutto l'oggetto?
    Nel caso come potere ovviare la cosa?

    grazie mille!!

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Premesso che non è chiaro cosa vuoi fare, io l'evento on l'ho sempre usato o associato ad un oggetto (div p span etc..) o elemento (#idelemento) del dom o appeso al body come da specifica non penso sai possibile appenderlo al document ma non sono certo
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Quote Originariamente inviata da zoc Visualizza il messaggio
    Ciao a tutti,
    non riesco a capire una cosa.
    Come mai quando richiamo un metodo di una classe dentro a un bind

    $(document).on("click", oggetto.metodo);

    all'interno di quel metodo non posso richiamare altri metodi dello stesso oggetto tramite this.altrometodo?
    Forse viene richiamato dentro nello scope del bind solo la funzione e non tutto l'oggetto?
    Nel caso come potere ovviare la cosa?

    grazie mille!!
    Potrei vedere l'intero oggetto?

  4. #4
    Ciao Andrea,
    e grazie per la risposta.

    Per quanto riguarda l'evento io l'ho visto utilizzare associato al documento, per esempio qui... ma forse solo nel caso di Jquery Mobile. Che ne pensi?

    Quello che non avevo capito nel mio esempio è che this, quando viene associato un metodo a un evento, non rappresenta l'oggetto, ma il contesto a cui viene attaccato l'evento. Pertanto non è possibile utilizzare altri metodi tramite l'uso di this.altroMetodo, perché giustamente non viene trovato. La soluzione è, usando bind, specificare il contesto di this, così:

    $("body").on("click", this.mioMetodo.bind(this));

    e dentro a mioMetodo posso utilizzare this come referenza dell'oggetto.
    Inoltre ho visto anche bypassare questo "problema" utilizzando una variabile all'interno della funzione che rappresenta this. Così:

    codice:
    function People (nome){
       this.nome = nome;
       var that = this;
       $("body").on("click", function(){
          console.log(that.nome);
       });
    }
    var pippo = new People("pippo");
    Quale dici sia la soluzione migliore?
    grazie!!

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Quote Originariamente inviata da zoc Visualizza il messaggio
    Ciao Andrea,
    e grazie per la risposta.

    Per quanto riguarda l'evento io l'ho visto utilizzare associato al documento, per esempio qui... ma forse solo nel caso di Jquery Mobile. Che ne pensi?
    Che sul sito di jquery non ne parlano e non ci sono esempi, ma che basta provare se funziona ok
    Quello che non avevo capito nel mio esempio è che this, quando viene associato un metodo a un evento, non rappresenta l'oggetto, ma il contesto a cui viene attaccato l'evento. Pertanto non è possibile utilizzare altri metodi tramite l'uso di this.altroMetodo, perché giustamente non viene trovato. La soluzione è, usando bind, specificare il contesto di this, così:

    $("body").on("click", this.mioMetodo.bind(this));

    e dentro a mioMetodo posso utilizzare this come referenza dell'oggetto.
    Inoltre ho visto anche bypassare questo "problema" utilizzando una variabile all'interno della funzione che rappresenta this. Così:

    codice:
    function People (nome){
       this.nome = nome;
       var that = this;
       $("body").on("click", function(){
          console.log(that.nome);
       });
    }
    var pippo = new People("pippo");
    Quale dici sia la soluzione migliore?
    grazie!!
    Non conosco la programmazione ad oggetti (sempre che di questo si tratti) ed essendo autodidatta, il mio credo è se funziona va bene altrimenti no
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Si si per funzionare funziona.
    Era per capire se era, per qualche motivo, meglio una strada piuttosto che l'altra, magari a livello di performance.

    Grazie mille!!
    Ciao ciao

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 © 2024 vBulletin Solutions, Inc. All rights reserved.