Ik ben een beetje aan het spelen met prototypejs. Ik ben op dit moment bezig om dingen beter te stroomlijnen. Ik wil Event.Observe gebruiken voor mijn radiobuttons.Wanneer de gebruiker een radiobutton aanklikt dan moet de desbetreffende DIV worden weergegeven (niet alle radiobuttons hoeven perse een div weer te geven).
Ik heb het nu gedeeltelijk voor elkaar. Ik vind de code nog een beetje crappy, ik wil graag jullie mening hebben en de code met jullie delen. Hoe doen jullie zoiets (zonder prototypejs mag ook), geef jullie mening?
Ik vind het belangrijk dat ik de code kan hergebruiken (bijv. dat ik de elementen/waardes dynamisch uit de DB kan halen). De code moet makkelijk toepasbaar zijn voor zowel radio als checkbox.
Zelf gebruik ik geen frameworks vooral niet in javascript(behalve dan mijn eigen microFramework), je eigen code kan dan wel korter geformuleerd worden maar in 99% van de gevallen gebruik je nog niet de helft van de framework methoden.
Het is trouwens altijd een slecht idee om je script in je body te plaatsen!
Anyhoo, ik zou het als volgt aanpakken:
Allereerst stel ik dat de Radio buttons alleen in een form voorkomen.
ik zou ervoor kiezen om een class te definiëren om de radios af te bakenen maar de IDs werken ook goed genoeg.
Nu, een eventlistener om de onclick listeners te binden. Window.onload lijkt me het best hier (hoewel DOMLoaded een beter alternatief is..) ook om de eenvoud.
Zoals je ziet doe ik niet bij iedere click een nieuwe fetch(document.getElementById) dit omdat het gewoon sneller is om elementen te cachen en getElementById met rust te laten.
De RadioCache wordt op gebouwd in 2D n.l. : radioCache[FORMVOLGNUMMER].elements[ELEMENTVOLGNUMMER]
je ziet dat ik in de loop de prefix verander, dit is alleen ten demostratie - om te laten zien dat het eenvoudig te veranderen is.
En nu een associatief object voor de radio buttons(hierna staat al gerefereerd in windowLoaded().
en dan heb je zo'n code geschreven en kom je tot de conclusie dat het weer niet werkt in Internet Explorer of andere rot browser, mootools is compact 42 Kb groot en daarmee de moeite nog niet om te gaan discussieren dat je de helft niet gebruikt. je kan zelfs de modules die je nodig hebt appart samenstellen en downloaden op de site.
dan nog is en blijft het ~40x zo groot als deze code. Wanneer ik hem door een javascript obfuscator haal is hij slechts ~1100Bytes groot.
Plus voor crossbrowser oplossingen heb ik het miniframeworkje.
Maar waarschijnlijk heb je gelijk 42kb is ook weer zo groot nog niet, maar dat is alleen de core functies ? Hoewel ik het in de hand houden van mijn eigen code misschien nog wel van groter belang vind, zo kun je op de meest efficiënt mogelijke wijze programmeren zonder dat andermans methode je in de weg zitten en uiteindelijk tot de conclusie komt dat het toch beter is om deze te herschrijven.
En, er zitten vaak strict javascript errors in dit soort frameworks, zoals variable hiding, single returns etc.
Die 42 KB is zelfs de volledige mootools library, uitgebreider als dat zul je het niet vinden . De core functie is zo'n 2KB groot.
En idd sommige frameworks beperken je mogelijkheden om je eigen stijl in scripten door te trekken maar met mootools heb ik tot nu toe hier geen enkel probleem gehad.
Je kent het lightbox effect wel zo'n div die op mysterieuze wijze over alles springt en fade naar zwart. met mootools maak je zoiets op 6 regels. Dit kan nog korter maar wordt het in mijn ogen onduidelijk.
$('lightbox_div').effect('opacity').start(0,0.8);
$('lightbox_div').addEvent('click',function(event) {
event = new Event(event);
var element = event.target;
element.effect('opacity').start(0.8,0);
});