events
DESCRIPTION
TRANSCRIPT
Cercul de RIAEvenimente
Facultatea de InformaticăIași
Ce este un eveniment ?
• Un eveniment este un “moment special” din viața unui obiect.
• Atunci când se produce un eveniment, toate sarcinile obiectului sunt trecute pe planul doi, tratarea corespunzătoare a evenimentului devenind principalul scop de moment.
• După tratarea evenimentului, obiectul își continuă “viața”.
http://flash.info.uaic.ro
Ce este un eveniment ?
• Nu toate evenimentele sunt importante pentru un obiect:
- pe unele le interesează când sunt “clicăcite”- pe altele le interesează când s-a încărcat o
anumita resursă- sau când se produce o eroare, sau apare o
problema de securitate, sau când primește sau pierde focusul, când este apăsată o tasta etc.
http://flash.info.uaic.ro
Ce este un eveniment?
• Un eveniment este un obiect, instanță a unei clase ce extinde clasa Events.
• Evenimentul este “aruncat” printr-o procedura “dispatch”
http://flash.info.uaic.ro
Dispatch – în dicționar • 1. expediere, trimitere; dispath service = serviciu de expediţie (al unei
case comerciale); dispatch note = borderou de expediere;• 2. rezolvare promptă (a unei afaceri);• 3. promptitudine, rapiditate; with all possible dispatch = cu cea mai
mare promptitudine;• 4. executare (a unui condamnat), omorâre; happy dispatch = harachiri;• 5. depeşă (diplomatică, telegrafică);• 6. întreprindere de transporturi rapide;• 7. a expedia (o scrisoare, mărfuri); a trimite (un curier);• 8. a omorî;• 9. a rezolva, a lichida repede (o afacere, o chestiune);• 10. a mânca pe nerăsuflate
Alte întrebări…
• Cine inițiază această procedură ? – chiar obiectul.
• De ce ? – pentru ca toată lumea să poată afla ce a pățit
• Cine poate lua măsuri ? (trata evenimentul) - Evenimentul poate fi tratat atât de obiectul
care i-a făcut dispatch cât și de oricare dintre părinții lui.
Cum află părinții de eveniment?
• Atunci când obiect de tip eveniment este aruncat (aruncat = dispatch), el trece prin trei faze: capture / targeting / bubbling.
Să traducem termenii >:)1. Capture = captură2. Target = țintă3. Bubble = ecou
http://flash.info.uaic.ro
Usecase
• În scenă avem un nod părinte care are doi copii:
http://flash.info.uaic.ro
Usecase
• Fiecare din copii are atașat evenimentul “Click”. În momentul apăsarii: acestuia, evenimentul trece prin cele trei faze (capture / targeting / bubbling ).
http://flash.info.uaic.ro
• Ordinea fazelor este exact cea expusă mai sus:
http://flash.info.uaic.ro
Captură
http://flash.info.uaic.ro
Țintă
http://flash.info.uaic.ro
Ecou
http://flash.info.uaic.ro
Fratele nu poate
“vedea” eventul
http://flash.info.uaic.ro
Cine poate “asculta” evenimentul ?
• Oricare din părinți• Obiectul• Din nou oricare din părinți (ecoul)
http://flash.info.uaic.ro
Let’s Code !Cele trei obiecte: un
părinte, doi copii
Evenimente de click pentru
fiecare…
http://flash.info.uaic.ro
Let’s Code ! Aranjăm în scenă, desenăm … chestii simple pentru
programatori AS3 așa avansați ca voi…
http://flash.info.uaic.ro
Let’s Code !Funcțiile - listener nu fac decât trace la numele obiectului care
a capturat evenimentul
http://flash.info.uaic.ro
Let’s Code ! După ce s-a apăsat NUMAI pe primul copil
http://flash.info.uaic.ro
Let’s Code ! TARGET
BUBBLE
http://flash.info.uaic.ro
Ce s-a întamplat cu faza de “capture”?
• Pentru a permite obiectelor-parinți să captureze evenimentul în faza de “capture”, comenzii addEventListener îi mai trebuie un parametru (true).
• De fapt acum vom atașa listenerul numai pentru faza de capture, nu și pentru bubble.
Here it is
http://flash.info.uaic.ro
Re-Run !
TARGET
CAPTURE
Se pot adăuga și toate fazele:
http://flash.info.uaic.ro
Re-Run ! CAPTURE
TARGET
BUBBLE
http://flash.info.uaic.ro
De ce e nevoie de toate fazele astea?
• Părinții pot trimite “mesaje” prin intermediul obiecteleor de tip eveniment către copii (și viceversa).
• Pentru a face acest lucru trebuie totuși ca evenimentul să permită adăugarea mesajului
• Un utilizator poate crea un obiect de tip eveniment ca instanța a unei clase (proprii) care să extindă event… NICE!
http://flash.info.uaic.ro
De ce e nevoie de toate fazele astea?
• De ce ar crea un utilizator așa ceva ? - de exemplu obiectul de tip meniu pentru o
galerie foto ar putea trimite părinților săi că toate pozele s-au încărcat ca un eveniment:
Să vă zic ceva mișto: “allMyPicturesAreLoaded”
Părintele: “UUUUuuu.. Sa te exploatam atunci”
http://flash.info.uaic.ro
Să creăm o clasă CustomEvent…
Extindere clasica
http://flash.info.uaic.ro
Să creăm o clasă CustomEvent…
Un nume pentru event este un șir de caractere (de ex:
MouseEvent.CLICK == “click”)
http://flash.info.uaic.ro
Să creăm o clasă CustomEvent…Se va propaga în sens invers ?(aici ar trebui să trimitem true
când facem obiectul de tip CustomEvent ca să putem sa îl
prindem și în faza de ecou)
http://flash.info.uaic.ro
Să creăm o clasă CustomEvent…I se permite vreunui obiect sa
opreasca propagarea cu “stopPropagation” sau
“stopImmediatePropagation” ?
http://flash.info.uaic.ro
Să creăm o clasă CustomEvent…
Apelăm constructorul superclasei cu parametrii primiți
http://flash.info.uaic.ro
Să creăm o clasă CustomEvent…Acest obiect nu poate “duce” nici o proprietate. Să îl facem dinamic
ca să-i putem adăuga proprietăți la runtime
http://flash.info.uaic.ro
WHAT NEXT?
• După apăsarea lui copil1, acesta va porni (intern) un timer: cu setInterval și vom apela la fiecare 500ms o funcție care va genera un număr întreg între 0 și 100. Dacă numărul este divizibil cu 10 va arunca evenimentul nostru de tip CustomEvent având proprietatea valoare setată cu valoarea numărului.
• Rescriem listenerul “evenimentCopil1”:
http://flash.info.uaic.ro
evenimentCopil1 Apelăm la fiecare 500ms
http://flash.info.uaic.ro
evenimentCopil1Această funcție
http://flash.info.uaic.ro
evenimentCopil1 În care se generează un uint
între 0 si 100
http://flash.info.uaic.ro
evenimentCopil1 Și dacă este divizibil cu 10
http://flash.info.uaic.ro
evenimentCopil1 Creăm un obiect de tip
CustomEvent
http://flash.info.uaic.ro
evenimentCopil1 Evenimentul va fi identificat prin
acest String
http://flash.info.uaic.ro
evenimentCopil1 Îi setăm o proprietate
http://flash.info.uaic.ro
evenimentCopil1 Și îi facem Dispatch
http://flash.info.uaic.ro
Evenimentul îl vom prinde mai apoi într-unul din părinți – scena de ex:
Care eveniment ? Acest eveniment!
Apel funcție listener (care va primi ca
parametru un obiect de tip CustomEvent)
http://flash.info.uaic.ro
evenimentCopil1Da, acesta !!!
http://flash.info.uaic.ro
evenimentCopil1
Care conține valoarea setată anterior !
http://flash.info.uaic.ro
http://flash.info.uaic.rohttp://flash.info.uaic.ro
De mai multe ori același event:
• Dacă pe copil1 atașăm de mai multe ori evenimentul MouseEvent.CLICK, ordinea capturării este cea a adăugării (de fapt este creată o lista de evenimente și în aceasta listă ordinea este cea în care s-au adăugat).
• Dacă vreți să modificați prioritatea, după al treilea parametru reprezentând capturarea, în momentul “capture”, se poate adăuga un al patrulea parametru de tip uint reprezentând prioritatea.
http://flash.info.uaic.ro
Weak References:
• Un ultim parametru atunci când este adăugat un eveniment este “use weak reference” de tip Boolean.
• Dacă obiectul căruia i-a fost adăugat evenimentul își pierde toate referințele în mod normal acesta ar trebui să fie colectat de garbage collector. Acest lucru se întâmplă fie dacă ați eliminat în prealabil evenimentul fie dacă ați setat ca true valoarea lui “use weak reference”.
http://flash.info.uaic.ro
Întrebări ?!?!