Events

Post on 15-Nov-2014

1,574 views 5 download

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 ?!?!