_nec - webfejlesztés, front-end programozás, javascript, css, xhtml, ajax, air

Adobe AIR #3 Események

Az előző részben az ablakkezelésről esett szó Adobe AIR alkalmazásokban, ebben a részben pedig az AIR eseményeiről és eseménykezeléséről írok majd. Rögtön egy ablakkezeléshez is kapcsolódó példával kezdek, amihez szorosan kötődik egy eseménykezelés, nevezetesen az alkalmazás ablak átméretezése.

Esetünkben jQuery segíti a DOM eseménykezelést.

	$('span#ResizeBottomLeft').mousedown(function(){
		window.nativeWindow.startResize(air.NativeWindowResize.BOTTOM_LEFT);
	});

Az átméretezés indítsa után az ablak folyamatosan küld egy air.Event.RESIZE típusú eseményt, melynek az afterBounds.height és afterBounds.width értékeit figyelve módosíthatjuk amit esetleg kell. Az eseményt a a window.nativeWindow objektumon kell elkapni, egy egyszerű addEventListener segítségével.

	window.nativeWindow.addEventListener(air.Event.RESIZE, function(event){
		MyChrome.resizeHandler(event);
	});

Mivel a futtatókörnyezet as/flex scriptrendszere szorosan egybeolvadt a javascriptel, nyugodtan használhatjuk a DOM programozásaink során megszokott addEventListener metódust az AIR események elfogására. Az air.Event.RESIZE gyakorlatilag egy konstans, ami az esemény nevét tartalmazza, az eseményfigyelő pedig feldolgozza a kapott adatokat, ahogy megszokhattuk jsben.

Esemény mint sültgalamb

Saját káromon tanultam, hogy ne várjak magamtól biztosra eseményt. Van pár esemény, pl az air.Event.CLOSING és az air.Event.EXITING, melyek az ablak bezárásánál illetve az alkalmazás bezárásánál sülnek el (ugye az ablak zárás nem feltétlenül azonos az alkalmazás bezárásával, kivéve ha egy ablakból áll az alkalmazás, de eseményszinten akkor is különböznek). A CLOSING esemény lefut, ha rákattintunk a bezár gombra a sima standard chrome keretű ablakon. Na de mi van akkor ha nincs chrome?

Akkor a bezárást mi indítjuk (milyen hülye szópárosítás), valószínüleg egy onclick eseményre, valami gombszerű elemen a window.nativeWindow.close() segítsével. Ugyan logikus lehetne, de nem fut le magától a CLOSING esemény, holott én szeretném az alkalmazásommal elkapni az ablakkezelőtől, hogy pl lementsek adatokat bezárás előtt. Ilyenkor nekünk kell kézzel elküldeni az eseményt is. Lássunk erre is példát:

	var eClose = new air.Event(air.Event.CLOSING, true, true);
	window.nativeWindow.dispatchEvent(eClose);

Tehát létrehozzuk az esemény objektumot egy air.Event példányosítással, majd a kívánt objektumon elküldjük az eseményt. Ha valahol elkapjuk ezt az eseményt, nagyon ügyeljünk arra, hogy ha dolgunkat elvégeztük, zárjuk is be az ablakot.  Az EXITING esetén ugyanez az eljárás.

Van itt viszont egy apró gond, ilyenkor vagy kiküldöd a CLOSING/EXITING eseményt, vagy elvégzed a feladatot a megfelelő metódusokkal, így egyszerre nem mehet.

Saját chrome?

Megoldás erre ha átszervezed az alkalmazásod – hangsúlyozom, itt most nincs chrome ablak, mindent lefejlesztettünk, átrajzoltunk, gyakorlatilag saját chrome-ot csináltunk. Vedd külön azokat a kontrollokat, jellemzőket és metódusokat, amik csak a saját chrome-odat kezelik, és tedd külön az alkalmazás lényegi logikáját. Ekkor a chrome működhet úgy, hogy a bezárás gomb nem a window.nativeWindow.close() metódust hívja meg, hanem a megfelelő eseményt indítja útjára. Ugyanitt ebben a chrome objektumban figyeltesd ezt az eseményt, és ha lefut, végezze el a feladatát már a window.nativeWindow.close() segítségével.

Ekkor az eseményre figyelhet az alkalmazás logika is, megállíthatja azt, elvégezheti a mentést, akármit, és ő zárhat végül. Jó kísérletezést a hétvégére!

Legközelebb belevágunk az AIR file-szintű műveleteibe, és csinálunk AIRben flashmentes multi-uploadert, drag-n-drop közbeiktatásával.

Eddig az Adobe AIR-ről:

cimkék:

Hozzászólások, trackbackek [trackback url]

  1. Kaszás Balázs 18:53 | 2008.06.25

    Köszi a cikket! Ez az eseménykezelés kicsit egyoldalúra sikerült (closing/exiting), de messziről látszik, hogy gyakorlati a példa, mert belefutottál a leírt problémákba.

  2. _nec 17:51 | 2008.07.01

    Hát bele. Irtó sok esemény van az AIR-ben, érdemesebb azokon a területeken vizsgálni őket, ahol előfordulnak. De igy megvan az alapja magának az eseménykezelésnek AIR-ben.

Szólj hozzá







kategóriák


del.icio.us

  • No bookmarks avaliable.

epp olvasom

  • A Clash of Kings

    A Clash of Kings by George R.R. Martin

flickr

  • Tuomas Holopainen - the Imagineer
  • The Flock
  • Christmas Crow
  • Geek joy
  • Fast Food - extreme edition
  • Teide north side
  • Teide National Park
  • Genesis
  • Rado Cerix
  • werk - _nec
  • werk - Strati

back to index