Ik ben nu een tijdje bezig met een treeview en heb hier een method waarbij een gedefinieerd pad door de treeview wordt uitgeklapt.
Omdat de treeview xml datasources onder een node kan hebben, moet bij het uitklappen eerst de data worden ingeladen alvorens de childNode kan worden geselecteerd. Hiervoor gebruik ik setTimeout op het object, die vervolgens de functie opnieuw aanroept.
Onder MSIE gebruik ik de welbekende object fix hiervoor:
Deze werkt alleen niet onder Mozilla bij mij. Ik heb ook nog op advies van een andere persoon het volgende geprobeerd, maar ook deze gaf geen krimp:
De functie als laatste die er gebruik van maakt is als volgt, en heeft als doel om via een pad de treeview uit te klappen:
Hoe gaat dit nu in Mozilla werken?
OF nog beter crossbrowser
Omdat de treeview xml datasources onder een node kan hebben, moet bij het uitklappen eerst de data worden ingeladen alvorens de childNode kan worden geselecteerd. Hiervoor gebruik ik setTimeout op het object, die vervolgens de functie opnieuw aanroept.
Onder MSIE gebruik ik de welbekende object fix hiervoor:
PHP:
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
| Object.prototype.eval = function(code){ eval(code); }; Object.prototype.setTimeout = function(code, time){ var scheduleNumber = null; if (Object.schedules == null){ Object.schedules = []; } scheduleNumber = Object.schedules.push(this) - 1; code = code.replace(new RegExp('(\'|\\\\)', 'g'), '\\$1'); return window.setTimeout('Object.schedules[' + scheduleNumber + '].eval(\'' + code + '\')', time); }; Object.prototype.setInterval = function(code, time){ var scheduleNumber = null; if (Object.schedules == null){ Object.schedules = []; } scheduleNumber = Object.schedules.push(this) - 1; code = code.replace(new RegExp('(\'|\\\\)', 'g'), '\\$1'); return window.setInterval('Object.schedules[' + scheduleNumber + '].eval(\'' + code + '\')', time); }; |
Deze werkt alleen niet onder Mozilla bij mij. Ik heb ook nog op advies van een andere persoon het volgende geprobeerd, maar ook deze gaf geen krimp:
PHP:
1
2
| var self = this; setInterval(function() {self.selectByLabelPath(path);}, 100) |
De functie als laatste die er gebruik van maakt is als volgt, en heeft als doel om via een pad de treeview uit te klappen:
PHP:
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
40
41
42
43
44
45
| treeview.prototype.selectByLabelPath = function(path){ var path; selectedNode = this; path = path.split(","); if(this.src != null && !this.loaded){ this.load(); /* var self = this; setInterval(function() { self.selectByLabelPath(path); }, 100) */ this.setTimeout("this.selectByLabelPath('"+path+"')",100); return; } var found = false; for(i=0;i<this.oNodeChilds.childNodes.length;i++){ if(this.oNodeChilds.childNodes[i].obj.label == path[0]){ this.oNodeChilds.childNodes[i].obj.select(); found = true; break; } } if(!found){ details = 'what happened: no childnodes found with provided label\nprovided label: '+path[0]; alert('an error occured within treenode.prototype.selectByLabelPath or treeview.prototype.selectByLabelPath: \n\ndetails:\n' + details); }else{ path = path.slice(1,path.length); if(path.length > 0){ var tmp = ''; for(i=0;i<path.length;i++){ tmp += path[i]; if(i<path.length-1){ tmp += ','; } } path = tmp; selectedNode.selectByLabelPath(path); } } } |
Hoe gaat dit nu in Mozilla werken?