Uit pure wanhoop een post van mij. Ik heb een stukje uit het script gepakt wat volgens mij relevant is, mocht er iemand meer nodig hebben, dan geef ik dat wel op request.
Het probleem is dat mijn eigen functies en variabelen niet meer herkent worden, nadat de objecten geladen/renderd zijn. Ik heb het vermoeden dat het ermee te maken heeft dat ik in de recursieve functie de childobject niet met een 'new' operator aanmaak.
De relevante code:
Wat ik zelf nog kan bedenken is, om het nieuwe element niet te returnen maar in de eigen scope al aan zijn parent te appenden. Dat is niet helemaal wat ik wil eigenlijk, maar dat zal ik in ieder geval nog uit gaan proberen. Intussen ben ik hier al een middag mee bezig, dus zou erg blij zijn als iemand me hiermee kan helpen.
[e: even uitlijning aangepast]
Nog even een extra stukje met de aanroep e.d.:
Dit geeft dus een alert met 'undefined' als resultaat. Als ik parentObj weg laat, dan krijg ik wel netjes een alert van het DOMElement.
Het probleem is dat mijn eigen functies en variabelen niet meer herkent worden, nadat de objecten geladen/renderd zijn. Ik heb het vermoeden dat het ermee te maken heeft dat ik in de recursieve functie de childobject niet met een 'new' operator aanmaak.
De relevante code:
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
30
31
32
33
34
35
36
37
38
39
| // .. this.getHTML = function(bSelfOnly) { this.element = document.createElement('dt'); // Maak nieuw element aan this.element.parentObj = this; // Maak een pointer voor later naar het //dataobject op het DOMElement this.element.appendChild( document.createElement('a').appendChild( document.createTextNode( this.titel ) ) ); // Voeg een link toe, zoals ingeladen // De controls eraan toevoegen this.element.appendChild(this.getControlHTML()); // Als er subelement zijn, nu die gaan toevoegen if (!bSelfOnly && (this.items.length > 0)) { oList = this.element.appendChild( document.createElement('dl') ); for (iInd in this.items) { // De reference naar het element opnieuw aanmaken // om hem in de tree te vinden. Hier gaat het waarschijnlijk fout??? this.items[iInd].element = oList.appendChild( this.items[iInd].getHTML( bSelfOnly ) ); // Onderstaand maakt geen zichtbaar verschil (met/zonder) //this.items[iInd].element.parentObj = this.items[iInd]; } } // Returnen return this.element; } // .. |
Wat ik zelf nog kan bedenken is, om het nieuwe element niet te returnen maar in de eigen scope al aan zijn parent te appenden. Dat is niet helemaal wat ik wil eigenlijk, maar dat zal ik in ieder geval nog uit gaan proberen. Intussen ben ik hier al een middag mee bezig, dus zou erg blij zijn als iemand me hiermee kan helpen.
[e: even uitlijning aangepast]
Nog even een extra stukje met de aanroep e.d.:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| this.getControlHTML = function() { oCtrlDiv = document.createElement('div'); oCtrlDiv.appendChild( document.createElement('a') ).appendChild( document.createTextNode('omhoog') ).parentNode.setAttribute( 'onmousedown','alert(getParent(getEvtSrc(event), \'dt\').parentObj);' ); return oCtrlDiv; } // De setattribute methode kan evt. wel vervangen worden door een mooie // oplossing, maar het werkt zo iig nu wel. |
Dit geeft dus een alert met 'undefined' als resultaat. Als ik parentObj weg laat, dan krijg ik wel netjes een alert van het DOMElement.
[ Voor 14% gewijzigd door r0bert op 22-08-2006 17:03 ]