+ All Categories

Events

Date post: 15-Nov-2014
Category:
Upload: university-al-i-cuza-of-iasi-romania
View: 1,574 times
Download: 5 times
Share this document with a friend
Description:
 
48
Cercul de RIA Evenimente Facultatea de Informatică Iași
Transcript
Page 1: Events

Cercul de RIAEvenimente

Facultatea de InformaticăIași

Page 2: Events

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

Page 3: Events

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

Page 4: Events

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

Page 5: Events

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

Page 6: Events

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.

Page 7: Events

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

Page 8: Events

Usecase

• În scenă avem un nod părinte care are doi copii:

http://flash.info.uaic.ro

Page 9: Events

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

Page 10: Events

• Ordinea fazelor este exact cea expusă mai sus:

http://flash.info.uaic.ro

Page 11: Events

Captură

http://flash.info.uaic.ro

Page 12: Events

Țintă

http://flash.info.uaic.ro

Page 13: Events

Ecou

http://flash.info.uaic.ro

Page 14: Events

Fratele nu poate

“vedea” eventul

http://flash.info.uaic.ro

Page 15: Events

Cine poate “asculta” evenimentul ?

• Oricare din părinți• Obiectul• Din nou oricare din părinți (ecoul)

http://flash.info.uaic.ro

Page 16: Events

Let’s Code !Cele trei obiecte: un

părinte, doi copii

Evenimente de click pentru

fiecare…

http://flash.info.uaic.ro

Page 17: Events

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

Page 18: Events

Let’s Code !Funcțiile - listener nu fac decât trace la numele obiectului care

a capturat evenimentul

http://flash.info.uaic.ro

Page 19: Events

Let’s Code ! După ce s-a apăsat NUMAI pe primul copil

http://flash.info.uaic.ro

Page 20: Events

Let’s Code ! TARGET

BUBBLE

http://flash.info.uaic.ro

Page 21: Events

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

Page 22: Events

Re-Run !

TARGET

CAPTURE

Page 23: Events

Se pot adăuga și toate fazele:

http://flash.info.uaic.ro

Page 24: Events

Re-Run ! CAPTURE

TARGET

BUBBLE

http://flash.info.uaic.ro

Page 25: Events

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

Page 26: Events

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

Page 27: Events

Să creăm o clasă CustomEvent…

Extindere clasica

http://flash.info.uaic.ro

Page 28: Events

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

Page 29: Events

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

Page 30: Events

Să creăm o clasă CustomEvent…I se permite vreunui obiect sa

opreasca propagarea cu “stopPropagation” sau

“stopImmediatePropagation” ?

http://flash.info.uaic.ro

Page 31: Events

Să creăm o clasă CustomEvent…

Apelăm constructorul superclasei cu parametrii primiți

http://flash.info.uaic.ro

Page 32: Events

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

Page 33: Events

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

Page 34: Events

evenimentCopil1 Apelăm la fiecare 500ms

http://flash.info.uaic.ro

Page 35: Events

evenimentCopil1Această funcție

http://flash.info.uaic.ro

Page 36: Events

evenimentCopil1 În care se generează un uint

între 0 si 100

http://flash.info.uaic.ro

Page 37: Events

evenimentCopil1 Și dacă este divizibil cu 10

http://flash.info.uaic.ro

Page 38: Events

evenimentCopil1 Creăm un obiect de tip

CustomEvent

http://flash.info.uaic.ro

Page 39: Events

evenimentCopil1 Evenimentul va fi identificat prin

acest String

http://flash.info.uaic.ro

Page 40: Events

evenimentCopil1 Îi setăm o proprietate

http://flash.info.uaic.ro

Page 41: Events

evenimentCopil1 Și îi facem Dispatch

http://flash.info.uaic.ro

Page 42: Events

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

Page 43: Events

evenimentCopil1Da, acesta !!!

http://flash.info.uaic.ro

Page 44: Events

evenimentCopil1

Care conține valoarea setată anterior !

http://flash.info.uaic.ro

Page 45: Events

http://flash.info.uaic.rohttp://flash.info.uaic.ro

Page 46: Events

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

Page 47: Events

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

Page 48: Events

Întrebări ?!?!


Recommended