Zašto je JavaScript težak

javascript.jpg Najveći problem koji imam pri JavaScript razvoju je konstantno mešanje konstrukcije, stilova i ponašanja u istom kodu.

Što se stilova tiče njih je relativno lako držati odvojene u zasebnom fajlu, ali opet se često dešava da se svojstva moraju menjati direktno iz JavaScripta... Ne mogu se imati klase baš za svaku moguću situaciju koja nam treba.

Kao što rekoh, stilovi nisu problem - problem je konstrukcija i ponašanje koje se kači na nju. Do sada nisam našao dovoljno fleksibilan metod koji omogućava jasnu separaciju između te dve stvari.

Kod PHP-a je lako jer on ne uključuje ponašanje već radi po run through principu (protrčiš i zaboraviš). Na primer, kada u activeCollabu korisnik zatraži projekat posetivši URL tipa:

http://projects.mycompany.com/projects/12

kontroler će od modela tražiti da učita projekat #12 i proslediti ga viewu da ga isti ispiše u pogodnom obliku. Run through - učita, ispiše, zaboravi da se ikad išta desilo.

Kod JavaScripta stvari ne idu baš tako lako jer HTML nije samo view već i konstrukcija. Evo ga primer:

$('<button type="button">Add option</button>').appendTo('body');

To bi u PHP-u bilo dosta - samo ispiši HTML i prosledi ga browseru. Ali, ovo dugme bez ikakvog ponašanja prikačenog na njega ne radi ništa. Zato moramo da dodamo ponašanje NAKON što je konstrukcija složena.

$('<button type="button">Add option</button>').click(function() {
alert('clicked!');
}).appendTo('body');

Ovo je samo jednostavan primer. Složeniji problemi mogu bili jako komplikovani sa jako mnogo nivoa konstruisanja elemenata i kačenja ponašanja na njih, intervalima i timerima, događajima... U celoj toj gužvi jako je teško jasno odvojiti slojeve što dovodi do koda od koga se ljudima često prevrne stomak kada ga prvi put vide.

PS: Primeri se oslanjaju na jQuery JavaScript biblioteku.