[JS] Scope probleem met recursie

Pagina: 1
Acties:

Onderwerpen


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Ik heb een klasse Project gemaakt, die gegevens over het project bevat, een paar functies voor het renderen van de bijbehorende GUI delen, en een lijst met subprojecten. Die subprojecten worden weer via de zelfde renderfunctie gerenderd, oftewel recursie. Nu heb ik het probleem dat alleen de laatste laag van de laatste tak getoond wordt.

Dat komt waarschijnlijk omdat projectControl gedeeld wordt tussen de verschillende instanties van Project die ik gemaakt heb, en dus niet bij die ene instantie. Ik weet niet hoe ik dit probleem met waarschijnlijk de scope opgelost kan krijgen, met this.projectControl werkte het ook niet.

Het uiteindelijke resultaat moet een geneste UL LI lijst zijn met projecten en subprojecten van de geselecteerde klanten.

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
40
41
42
    function Project(id, name, customer)
    {
        var id = id;
        var customer = customer;
        var name = name;

        // children
        var subProjects = Array();

        // GUI
        var projectControl = null;

        /* snip */

        this.getControl = function()
        {
            if (this.projectControl == null)
            {
                // creat the dom node
                projectControl = document.createElement('LI');
                projectControl.style.width = '150';
                projectControl.style.backgroundColor = customer.getColor();
                innerSpan = document.createElement('SPAN');
                innerSpan.appendChild(document.createTextNode(name));
                projectControl.appendChild(innerSpan);
                projectControl.onmousedown = doDrag.bind(this);

                // render the projects
                if (subProjects.length > 0)
                {
                    subList = document.createElement('UL');
                    for (var t = 0; t < subProjects.length; t++)
                    {
                        subList.appendChild(subProjects[t].getControl());
                    }
                    projectControl.appendChild(subList);
                }
            }
            return projectControl;
        }
    /*snip*/
    }

iOS developer


  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Heb je aan dit topic misschien wat?

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Maar ik heb toch netjes alles met var lokaal geïnitialiseerd?

Oh.....behalve subList! :+

Muchas Gracias! Het werkt! _/-\o_

iOS developer


  • Juup
  • Registratie: Februari 2000
  • Niet online
1. Deze statements doen helemaal niets dus die mag je weglaten:
JavaScript:
1
2
3
var id = id; 
var customer = customer; 
var name = name;


2. this.getControl kun je beter uit de functie halen zodat duidelijker is of het een class of instance functie is. bv met Project.prototype.getControl = function(){};

3. Dit doet ws. niet wat je denkt dt het doet:
JavaScript:
1
var subProjects = Array(); 

new? Handiger is daarom ook gewoon [] gebruiken.

[ Voor 19% gewijzigd door Juup op 10-09-2008 15:49 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.