Ik ben eens serieus bezig iets OO in Javascript te proggen en ik stuit nog op enkele problemen die ik gewoon niet netjes weet op te lossen. Het knaagt ontzettend aan me dus als iemand me kan bevrijden met een nette duidelijke methode dan ben ik je erg dankbaar 
Het probleem is dat ik vanuit een object dynamisch elementen in het document aan het wijzigen en toevoegen ben en ik ze events toewijs waarin variabelen gebruikt worden die eigenlijk niet zo goed bereikbaar zijn vanuit het betreffende element.
Stel ik wil 10 plaatjes toevoegen die, van een member van het object dat ze aanmaakt, een functie aanroepen met een bepaald nummer (als index oid). Even een stukje voorbeeld code om duidelijk te maken wat ik bedoel:
Een beetje zichzelf respecterend scripter is net bijna naar de wc gerent om de maaginhoud op een zeer onsmakelijke manier in de pot te leggen
Hier zitten 2 smerige truukjes in verwerkt. De eerste is "eenAnderObject = this.eenAnderObject;" wat ik doe om in het mouseover event van het plaatje een method te kunnen aanroepen van dat object. this verwijst namelijk op dat moment naar het plaatje zelf en niet naar de instantie van EenObject die het plaatje maakte. Het tweede smerige truukje is om de waarde van 'i' direct in een functie te kunnen gebruiken. Als ik deze namelijk direct gebruik, dan gebruiken alle plaatjes de laatste waarde van i, namelijk 9.
Het enige wat ik zou kunnen bedenken om dit op te lossen is om deze waardes toe te wijzen aan custom attributen van img. iets als img.eenAnderObject = this.eenAnderObject. Dit heb ik echter nog niet uitgeprobeerd omdat dit volgens mij niet mogelijk is. Ik ga het zo wel even uitproberen, maar ik ben toch benieuwd naar wat andere creatieve geesten hier van kunnen maken.
Het probleem is dat ik vanuit een object dynamisch elementen in het document aan het wijzigen en toevoegen ben en ik ze events toewijs waarin variabelen gebruikt worden die eigenlijk niet zo goed bereikbaar zijn vanuit het betreffende element.
Stel ik wil 10 plaatjes toevoegen die, van een member van het object dat ze aanmaakt, een functie aanroepen met een bepaald nummer (als index oid). Even een stukje voorbeeld code om duidelijk te maken wat ik bedoel:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| function EenObject() { this.eenAnderObject = new EenAnderObject(); this.voegPlaatjesToe = function() { for ( i = 0; i < 10; i++ ) { img = document.createElement("img"); eenAnderObject = this.eenAnderObject; img.onmouseover = function () { eenAnderObject.doeIets(); }; onclickEvent = null; evalCode = "onclickEvent = function(){"; evalCode += "eenAnderObject.doeIetsOpBasisVanIndex(" + i + ");"; evalCode += "}"; eval(evalCode); img.onclick = onclickEvent; document.getElementById('eenElement').appendChild(img); } } } |
Een beetje zichzelf respecterend scripter is net bijna naar de wc gerent om de maaginhoud op een zeer onsmakelijke manier in de pot te leggen
Hier zitten 2 smerige truukjes in verwerkt. De eerste is "eenAnderObject = this.eenAnderObject;" wat ik doe om in het mouseover event van het plaatje een method te kunnen aanroepen van dat object. this verwijst namelijk op dat moment naar het plaatje zelf en niet naar de instantie van EenObject die het plaatje maakte. Het tweede smerige truukje is om de waarde van 'i' direct in een functie te kunnen gebruiken. Als ik deze namelijk direct gebruik, dan gebruiken alle plaatjes de laatste waarde van i, namelijk 9.
Het enige wat ik zou kunnen bedenken om dit op te lossen is om deze waardes toe te wijzen aan custom attributen van img. iets als img.eenAnderObject = this.eenAnderObject. Dit heb ik echter nog niet uitgeprobeerd omdat dit volgens mij niet mogelijk is. Ik ga het zo wel even uitproberen, maar ik ben toch benieuwd naar wat andere creatieve geesten hier van kunnen maken.
[ Voor 9% gewijzigd door Michali op 08-05-2005 13:18 ]