Beste Tweakers,
Ik heb een aantal vragen over het goed opzetten van een javascript object.
Voor mijn eigen voorbeeld heb ik een treeView als voorbeeld gepakt. (Niet dat er niet genoeg te vinden zijn maar dit is puur proberen te begrijpen / leren)
Even klein stukje van mijn ontwerpje (Alle inrelevante dingen heb ik weggelaten)
Bovenstaand heb ik in een werkend script verwerkt.
Echter een aantal vragen zijn gerezen
In het treeView object maak ik altijd een lege UL aan zodat je altijd een parent Ul object heb.
Vervolgens plak ik aan alle nodes die via de addNode van of de treeView of een treeNode binnen komen het parent object.
Zodat elke treeNode dus een oParentUl heeft.
Bij de method "draw" uit het treeNode object maak ik een UL object
Wanneer ik vanuit de treeView de methode "draw" aanroep zal deze dus door alle childnodes heen lopen en daar ook de method "draw" aanroepen.
Dus als de treeView 2 keer gebouwd word, dan worden er dus nieuwe javascript HTML objecten aangemaakt.
Nu kan ik natuurlijk wel alles eerst op NULL zetten, maar daarmee lijk je alleen de referentie weg te halen maar niet het object te destructen.
Ook heb ik nog wat geprobeerd met removeNode, maar het lijkt niet uit te maken.
Je zou toch verwachten dat wanneer je het object overschrijft dat de garbage collector het oude object opruimt? (Ik kan hier geen defenitie voor vinden)
Verder is dus elke node een nieuw object, terwijl het ook met een multi array af zou kunnen en een paar extra methods in de treeView.
Volgende vraag gaat dus over het destructen van objecten, ik kan er zeer weinig over vinden, behalve dan dat het niet zou kunnen.
Iedere keer als je zegt document.createElement wordt er toch een object aangemaakt. Moet je dan iets doen met window.onUnload
en dan zelf een array met objecten bijhouden zodat je bij unload al deze aangemaakte objecten via document.removeChild weer wegt dient te halen?
Dan als laatse een vraag over het expanden van de treeNodes.
In elke treeNode heb ik een expand/collapse functie, de expand functie heeft echter een extra eigenschap, namelijk het controleren of de childNodes geladen zijn.
Zo niet dan zal deze treeNode nu intern eerst de methode "loadChildNodes" aanroepen alvorens te expanden.
Zo wel dan kan meteen expand aangeroepen worden.
Het voordeel aan de ene kant is dat je een soort caching mechanisme hebt, aan de andere kant als er dus iets veranderd zal je dat dus niet meekrijgen indien je node al geopend had.
Is het dan beter om het niet vast te houden en toch bij elke keer expand een nieuwe httpRequest doen?
Soms als ik aan het testen ben zie ik mozilla,ie oplopen tot wel 80/90MB. Dus ik moet haast wel een hoop open referenties hebben.
Ik heb een aantal vragen over het goed opzetten van een javascript object.
Voor mijn eigen voorbeeld heb ik een treeView als voorbeeld gepakt. (Niet dat er niet genoeg te vinden zijn maar dit is puur proberen te begrijpen / leren)
Even klein stukje van mijn ontwerpje (Alle inrelevante dingen heb ik weggelaten)
code:
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
| (object) base (methoden) httpRequest onHttpComplete (object) treeView extends base (Properties) (array) childNodes (methoden) addNode draw (object) treeNode extends base (Properties) (string) id (string) name (string) childLoadUrl (bool) childsLoaded (object) parentUl (array) childNodes (methoden) draw addNode expand collapse loadChildnodes |
Bovenstaand heb ik in een werkend script verwerkt.
Echter een aantal vragen zijn gerezen
In het treeView object maak ik altijd een lege UL aan zodat je altijd een parent Ul object heb.
Vervolgens plak ik aan alle nodes die via de addNode van of de treeView of een treeNode binnen komen het parent object.
Zodat elke treeNode dus een oParentUl heeft.
Bij de method "draw" uit het treeNode object maak ik een UL object
code:
1
2
3
4
5
6
7
8
9
| treeNode.prototype.draw = function() { var oSpan = document.createElement('span'); oSpan .innerHTML = this.name this.oLI = document.createElement('li'); this.oUL = document.createElement('ul'); this.oLI.appendChild(oSpan); this.oLI.appendChild(this.oUL); } |
Wanneer ik vanuit de treeView de methode "draw" aanroep zal deze dus door alle childnodes heen lopen en daar ook de method "draw" aanroepen.
Dus als de treeView 2 keer gebouwd word, dan worden er dus nieuwe javascript HTML objecten aangemaakt.
Nu kan ik natuurlijk wel alles eerst op NULL zetten, maar daarmee lijk je alleen de referentie weg te halen maar niet het object te destructen.
Ook heb ik nog wat geprobeerd met removeNode, maar het lijkt niet uit te maken.
Je zou toch verwachten dat wanneer je het object overschrijft dat de garbage collector het oude object opruimt? (Ik kan hier geen defenitie voor vinden)
Verder is dus elke node een nieuw object, terwijl het ook met een multi array af zou kunnen en een paar extra methods in de treeView.
Volgende vraag gaat dus over het destructen van objecten, ik kan er zeer weinig over vinden, behalve dan dat het niet zou kunnen.
Iedere keer als je zegt document.createElement wordt er toch een object aangemaakt. Moet je dan iets doen met window.onUnload
en dan zelf een array met objecten bijhouden zodat je bij unload al deze aangemaakte objecten via document.removeChild weer wegt dient te halen?
Dan als laatse een vraag over het expanden van de treeNodes.
In elke treeNode heb ik een expand/collapse functie, de expand functie heeft echter een extra eigenschap, namelijk het controleren of de childNodes geladen zijn.
Zo niet dan zal deze treeNode nu intern eerst de methode "loadChildNodes" aanroepen alvorens te expanden.
Zo wel dan kan meteen expand aangeroepen worden.
Het voordeel aan de ene kant is dat je een soort caching mechanisme hebt, aan de andere kant als er dus iets veranderd zal je dat dus niet meekrijgen indien je node al geopend had.
Is het dan beter om het niet vast te houden en toch bij elke keer expand een nieuwe httpRequest doen?
Soms als ik aan het testen ben zie ik mozilla,ie oplopen tot wel 80/90MB. Dus ik moet haast wel een hoop open referenties hebben.
