AIR приложение с HTML и JS

От много време съм фен на Adobe и откакто създадоха AIR все ми се иска да направя някакво приложение, използвайки тази технология. Отначало си мислех за някое desktop приложение, но откакто AIR вече върви и на мобилни телефони (а от известно време и аз вече имам такъв, който да поддържа AIR) си мисля и за мобилно приложение.

Преди две години даже веднъж се бях пробвал, но нещо ми се объркаха нещата с вградената база данни, при което се отказах. От тогава до сега не съм и докосвал AIR (все нямам време), но  преди няколко дена вече най-сетне реших да опитам отново да направя нещо, пък ще се надявам този път да го завърша. Това, което започнах да разработвам е просто приложение за бележки — като sticky notes, само че на GSM-а. Цъкваш бутон и имаш нова бележка. Цъкваш върху бележката и можеш да редактираш съдържанието ѝ. И докато не я изтриеш тя си седи на екрана на приложението.

В неделя започнах разработването на въпросното приложение:

  • направих си връзка към базата данни
  • направих си и таблица за съхранение на бележките
  • направих дори и дизайна на бележките

След това започнах и разработването на държанието на бележките. Добавих drag-and-drop функционалност, която по лично мое мнение не върви особено бързо — щеше ми се да е по-добре. Не съм сигурен дали не е поради факта, че го тествам все в debug режим (може би като го пусна като release версия ще е малко по-добре), но може и самият runtime да се предстява в известна степен по-зле отколкото същият ефект би вървял в обикновен браузър. Обещавам да направя няколко теста и да споделя какви са резултатите.

От голяма помощ в разработването на класа на бележките ми бяха няколко урока за OOP в JavaScript:

В общи линии и преди съм хвърлял по един поглед на тези уроци и даже именно от тях съм заимствал в моя урок за достъпен слайдер, но едва преди няколко дена вече ги прочетох задълбочено.

Най-големият проблем, който за момента съм срещнал в разработването на приложението за бележки това, кога трябва да определя, че съдържанието на бележката трябва да се запише в базата данни.

От една страна звучи съвсем просто — връзваш се към един change event на бележката и си готов. Поне така си мислех отначало. Направих си event-и в определени моменти, даже си ги и dispatch-нах, ама когато дойде време да добавя eventListener за въпросните събития се оказа, че моят custom class няма метод addEventListener.

От една страна — логично да няма, след като не съм му направил, ама от друга страна — обикновените обекти в JS не поддържат ли автоматично подобна функционалност? За сравнение — в ActionScript 3 почти всичко extend-ва клас наречен EventDispatcher, който пък extend-ва директно Object класа, така че трябва наистина да се постараеш, за да нямаш addEventListener в ActionScript.

Проблемът с JS обаче си остава. Известно време се чудих какво да правя, а днес се консултирах и с моя добър приятел Сиян Панайотов, който ми даде идея сам да си имитирам простичка event функционалност. В най-общи линии идеята е да си направя addEventListener метод, който в един обект да има ключ за всеки тип събития, като на този ключ отговаря масив от callback функции. Така addEventListener просто добавя още една функция в съответния масив, а dispatch-ването на event-ите просто вика функциите от масива.

Чисто, просто, без някакви конкретни проблеми. Да, ама на мене самата идея да се симулират такива фалшиви event-и нещо не ми допада. Така де — за момента съм с тези псевдо събития, но след като ги имплементирах пак се зарових по какъв друг начин може да се реши проблемът. Ще ми се да е възможно най-оптимизирано, защото все пак приложението ще е предназначено за телефони, а там процесорите все още не са чак кой-знае-колко стабилни.

След продължилите ми търсения ми дойдоха на ум три идеи — или класът ми да extend-ва HTMLElement (DOM елемент, който може да dispatch-ва event-и и който има addEventListener метод), или да имам един основен HTML елемент в класа, като самият клас е просто wrapper около елемента (както и без това ми е почти устроен класът), или да зарежа HTML/JS и да си го направя цялото на Flex 😀 — хем в последния вариант и drap-and-drop функциите съм убеден, че ще вървят по-гладко.

Има и четвърти вариант, но него за сега мисля да го оставя на друг — да седна да науча Java, за да направя въпросното приложение за Android. Минусът тук е, че ще върви само на Android, а иначе ще мога да го пускам и на Windows Phone 7, и на BlackBerry и за iOS бих могъл да го пакетирам, а и трябва да науча Java :).

Като напредна малко и си пооправя кода мисля даже да го кача в GitHub и да го споделя с вас и всички останали. Дано само после не ми се смеят много хора на импровизациите.

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

Този сайт използва Akismet за намаляване на спама. Научете как се обработват данните ви за коментари.