HighDots Forums  

Eventi e istanze di classi

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss Eventi e istanze di classi in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
ReadOnly
 
Posts: n/a

Default Eventi e istanze di classi - 04-30-2008 , 06:38 AM






Sto cercando di realizzare una classe che se istanziata aggancia e
gestisce in modo autonomo una serie di eventi ad un elemento, ma ho
alcune difficolta' in quanto non m'e' chiaro come ragiona js nel codice
che ho scritto.

Ipotizziamo di avere una cosa simile:

function paperino(elemId)
{
this.numero=10;
this.elemento=document.getElementById(elemId);

this.elemento.onmousedown = function(e)
{
alert(this.numero);
}
}

var test=new paperino("idDiUnDIV");

Se clicco sul div con id idDiUnDIV ottengo un bel undefined. Come faccio
a fare in modo che in risposta all'evento la funzione venga chiamata nel
contesto dell'istanza corrente di paperino? (Senza scrivere codice FUORI
dalla classe, che senno' funziona benissimo...)

Quello che vorrei ottenere è un facsimile di questo (per chi mastica .Net):

class Paperino
{
protected void HandlerEventi(EventArgs e) { /* Fai qualcosa */ }
public Paperino(RoboConEventi Robo)
{
Robo.EventoInteressante +=
new RoboConEventi.EventoInteressanteDelegate(HandlerEv enti);
// Richiama una funzione di QUESTA istanza, e comunque
// dato che HandlerEventi non e' statica non potrebbe
// essere altrimenti...
}
}

Reply With Quote
  #2  
Old   
Ugo
 
Posts: n/a

Default Re: Eventi e istanze di classi - 04-30-2008 , 02:15 PM






Quote:
Ipotizziamo di avere una cosa simile:

function paperino(elemId)
{
this.numero=10;
this.elemento=document.getElementById(elemId);

this.elemento.onmousedown = function(e)
{
alert(this.numero);
^^^^^
attenzione questo this non è il riferimento dell'oggetto, bensì
dell'elemento, prova a fare alert(this.id)
Quote:
}
}

var test=new paperino("idDiUnDIV");

Se clicco sul div con id idDiUnDIV ottengo un bel undefined.
eh già vedi prima..

Quote:
Come faccio
a fare in modo che in risposta all'evento la funzione venga chiamata nel
contesto dell'istanza corrente di paperino?
un modo possono essere le chiusure
qui c'è un link che più volte Zer0 ha postato:
http://www.jibbering.com/faq/faq_notes/closures.html

Quote:
(Senza scrivere codice FUORI
dalla classe, che senno' funziona benissimo...)
ad es. puoi fare:

function paperino(elemId)
{
var numero=10;
this.elemento=document.getElementById(elemId);

this.elemento.onmousedown = function(e)
{
alert(numero);
}
}

pero' bisognerebbe vedere tutto il contesto, l'utilizzo della variabile in
quel modo la "privatizza" all'interno della classe e può essere utilizzata
solo nel costruttore e/o come chiusura (quindi definendo opportunamente le
funzioni...)


Reply With Quote
  #3  
Old   
ZER0
 
Posts: n/a

Default Re: Eventi e istanze di classi - 04-30-2008 , 06:37 PM



Ugo <privacy (AT) nospam (DOT) it> wrote:

Quote:
Come faccio
a fare in modo che in risposta all'evento la funzione venga chiamata nel
contesto dell'istanza corrente di paperino?

un modo possono essere le chiusure
qui c'è un link che più volte Zer0 ha postato:
http://www.jibbering.com/faq/faq_notes/closures.html
Si, ma attenzione che qua ci poniamo nella situazione in cui si hanno
closure su riferimenti DOM <-> JS; che sono la causa prima dei memory
leak su IE.
Sebbene la Microsoft abbia "patchato" buona parte delle questioni sui
memory leak, sfortunatamente non sono stati del tutto eliminati, come
ha fatto notare uno sviluppatore di google.

Quindi a meno di non sapere ESATTAMENTE cosa si sta facendo, direi di
andarci con i piedi di piombo.

--
"Se c'è qualcosa di più importante del mio ego su questa nave,
la voglio catturata e fucilata."


Reply With Quote
  #4  
Old   
ReadOnly
 
Posts: n/a

Default Re: Eventi e istanze di classi - 05-01-2008 , 12:36 PM



ZER0 ha scritto:
Quote:
Ugo <privacy (AT) nospam (DOT) it> wrote:

Come faccio
a fare in modo che in risposta all'evento la funzione venga chiamata nel
contesto dell'istanza corrente di paperino?

un modo possono essere le chiusure
qui c'è un link che più volte Zer0 ha postato:
http://www.jibbering.com/faq/faq_notes/closures.html

Si, ma attenzione che qua ci poniamo nella situazione in cui si hanno
closure su riferimenti DOM <-> JS; che sono la causa prima dei memory
leak su IE.
Sebbene la Microsoft abbia "patchato" buona parte delle questioni sui
memory leak, sfortunatamente non sono stati del tutto eliminati, come
ha fatto notare uno sviluppatore di google.

Quindi a meno di non sapere ESATTAMENTE cosa si sta facendo, direi di
andarci con i piedi di piombo.

Grazie ad entrambi! Per il momento ho risolto in modo un po' casereccio
forse, ma che rientra di più in qualcosa che comprendo e so come
gestire: ho un array globale nel quale pusho tutte le istanze che creo,
poi un unico gestore degli eventi che mi servono se lo gira confrontando
l'id del target con quello delle istanze di classe e quindi provvede a
disptchare l'evento a chi lo dovrà effettivamente gestire.

Ora credo che mi studierò bene le chiusure non fosse altro che per
capire meglio come funziona js.


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.