Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435

    Riferimenti ad elementi del "nonno".

    Premessa 1
    Mod, so che il titolo non è il massimo, quindi vi chiedo se capite il mio problema di cambiarlo con uno migliore (il titolo, non il problema)...
    Premessa 2
    Uhm... Non so come spiegare il problema...
    Provo ad esemplificare con un codice fittizio:

    codice:
      01| function nomeOggetto()
      02| {
      03|   this.nomeVariabile = null;
      04|   this.oggettoUno = null;
      05| }
      06| nomeOggetto.prototype = 
      07| {
      08|   creaOggetto = function(valoreVariabile)
      09|   {
      10|     this.nomeVariabile = valoreVariabile
      11|     this.oggettoUno = document.createElement("img");
      12|     // creazione di altri oggetti utilizzando document.createElement
      13|     oggettoUno.onmousedown = function()
      14|     {
      15|       alert("Valore di nomeVariabile (1) = " + this.nomeVariabile);
      16|     }
      17|     altroOggetto.appendChild(oggettoUno);
      18|   },
      19|   notificaValoreVariabile = function()
      20|   {
      21|     alert("Valore di nomeVariabile (2) = " + this.nomeVariabile);
      22|   }
      23| }
      24| ...
      xx| ...
    xx+1| onload = function()
    xx+2| {
    xx+3|   tmp = new nomeOggetto();
    xx+4|   tmp.creaOggetto();
    xx+5| }
    Le mie domande sono due:
    [list=1][*]Riga 15: this.nomeVariabile == undefined.
    Come faccio ad accedere da questa funzione agli oggetti del "padre" (sarebbe il nonno)?[*]Riga 19:
    Come faccio in alternativa a chiamare il metodo notificaValoreVariabile dalla riga 15?[/list=1]
    Se alla riga 15 (o comunque da dentro alla funzione chiamata dall'evento onmouseover) cerco di chiamare la funzione notificaValoreVariabile mi restituisce errore perché utilizzando il this mi riferisco all'oggetto corrente, oggettoUno in quel caso.

    Se riuscite ad aiutarmi vi ringrazio.

  2. #2
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435
    E se io scrivessi "up"?

  3. #3
    Finchè non trovi una soluzione migliore puoi fare così:

    codice:
    function nomeOggetto()
    {
    this.nomeVariabile = null;
    this.oggettoUno = null;
    this.oggettoUno.nomeVariabile = this.nomeVariabile;
    }

  4. #4
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435
    Forse non mi sono spiegato.

    Facendo come hai suggerito te dovrei replicare n volte (n = numero di oggetti su cui devo lavorare) gli m attributi (di nomeOggetto, nell'esempio), ed andrei ad agire su quelli "locali" (se si possono così definire).

    Esiste (quasi sicuramente) la possibilità di andare ad operare (avere accesso, se così si può dire, in lettura e scrittura) direttamente sulle variabili del "nonno" (nonno perché per oggettoUno.onmousedown sono del padre del padre)?

    Io invece ho bisogno di andare a "mettere le mani" dall'interno della funzione oggettoUno.onmousedown in this.nomeVariabile di nomeOggetto, non solo per leggere.

    Se non mi sono spiegato ditelo che cerco di esemplificare meglio...

  5. #5
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435
    Provo a variare la domanda per vedere se arriva qualche risposta.

    E' possibile, in javascript, "tramandare" per riferimento gli attributi di un oggetto ai figlio?

    Se sì come?

  6. #6
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435
    Ho risolto prendendo spunto dal suggerimento di mega69... Posto il codice esemplificativo della soluzione:

    codice:
    __oggetti = new Array();
    
    function retrieveObject(arrayToSearchIn, attributeName, attributeValue)
    {
      var
        i = 0;
      while (i < arrayToSearchIn.length && eval("arrayToSearchIn[i]." + attributeName) != attributeValue) ;
      if (eval("arrayToSearchIn[i]." + attributeName) == attributeValue)
          return arrayToSearchIn[i];
      else
        return null;
    }
    
    function nomeOggetto()
    {
      this.nomeVariabile = null;
      this.altroOggetto = null;
      this.oggettoUno = null;
    }
    nomeOggetto.prototype = 
    {
      creaOggetto = function(altroOggetto, valoreVariabile)
      {
        this.nome = altroOggetto.getAttribute("id") + "aaa"; // nome generato utilizzando l'id di un parametro
        __oggetti.push(this);
        this.altroOggetto = altroOggetto;
        this.nomeVariabile = valoreVariabile
        this.oggettoUno = document.createElement("img");
        // creazione di altri oggetti utilizzando document.createElement
    
        this.oggettoUno.genitore = retrieveObject(__oggetti, "nome", this.altroOggetto.getAttribute("id") + "aaa");
    
        this.oggettoUno.onmousedown = function()
        {
          this.oggettoUno.genitore.notificaValoreVariabile;
        }
        altroOggetto.appendChild(oggettoUno);
      },
      notificaValoreVariabile = function()
      {
        alert("Valore di nomeVariabile = " + this.nomeVariabile);
      }
    }
    
    onload = function()
    {
      tmp = new nomeOggetto();
      tmp.creaOggetto();
    }
    Grazie a tutti per l'interessamento...

  7. #7
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435
    Se comunque qualcuno avesse una soluzione migliore che risparmi al client il ciclo per recuperare l'oggetto ben venga... Resto in ascolto...

  8. #8
    Al posto di
    eval("arrayToSearchIn[i]." + attributeName)

    scrivi
    arrayToSearchIn[i][attributeName]

    così già risparmi un pò di memoria.
    Trucchetto imparato da Andr3a

  9. #9
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435
    Ed ora ho un altro problema... Non è proprio un probelma... Anzi sì...

    codice:
           | [...]
           | nomeOggetto.prototype =
           | {
           |   creaOggetto: function([...]) {
           | 
           |     [...]
           | 
           |     this.oggettoUno.onmousedown = function()
           |     {
           |       this.oggettoUno.genitore.notificaValoreVariabile;
           |     }
           |     altroOggetto.appendChild(oggettoUno);
           |   },
           |   notificaValoreVariabile = function()
           |   {
    riga X |     this.timer = setInterval("this.notificaInterval()", 25);
           |   },
           |   notificaInterval = function()
           |   {
           |     // bla bla bla
           |   }
           | }
    this.notificaInterval() is not a function alla riga X


  10. #10
    Utente di HTML.it L'avatar di hcka
    Registrato dal
    Oct 2002
    Messaggi
    435
    up

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.