Ich bin grad am verzweifeln und weiß nicht, was ich falsch mache. Irgendwie blick ich die Welt nicht mehr... wird ein kleiner Fehler sein, den ich vor lauter Coden nicht mehr sehen will/kann... :-/
Ich habe folgenden Code (vereinfacht), der eine Baumstruktur darstellen soll - nutzt prototype.js v1.7:
var NodeArray = Class.create({
initialize: function() {
this.addNode = this.addNode.bind(this);
this.selectedNode = null;
},
addNode: function(node) {
node.nodearr = this;
}
});
var Node = Class.create({
initialize: function(parent, no) {
this.addNode = this.addNode.bind(this);
this.printout = this.printout.bind(this);
this.no = no;
this.parent = parent;
this.children = new Array();
this.nodearr = null;
this.printout.delay(0.5); // Delay, damit genug Zeit ist, um den Wert per #addNode zu setzen
},
addNode: function(node) {
alert("Node#addNode: " + this.no + ": " + this.nodearr);
node.nodearr = this.nodearr;
this.children.push(node);
},
printout: function() {
alert("Node#printout: " + this.no + ": " + this.nodearr);
}
});
var arr = new NodeArray();
var n = new Node(arr, 1); // Knoten für die zweite Schicht erzeugen...
n.addNode(new Node(n, 2)); // ...und hinzufügen
arr.addNode(new Node(arr, 3));
arr.addNode(n);
arr.addNode(new Node(arr, 4));
Bei "Kindknoten" der Baumstruktur ist this.nodearr nicht bekannt, bzw. es ist der Wert, der in der initialize-Funktion der Klasse Node gesetzt wurde (null), wobei dieser Wert eigentlich in der addNode-Funktion der Klasse Node gesetzt werden sollte. Nur warum das nicht geschieht, ist mir ein großes Fragezeichen.
Eigentlich sollen die Nodes der obersten Schicht einfach nur ihr Wissen der Instanz der Klasse NodeArray an ihre Kindknoten weitergeben, nur das will nicht klappen, obwohl diese eine Instanz haben, was die Ausgabe der alert()-Aufrufe deutlich macht:
Node#addNode: 1: null // hier ist this.nodearr unbekannt...
Node#printout: 1: [object Object] // ...während es in der printout-Funktion bekannt ist!
Node#printout: 2: null // ist als einziger ein Knoten der zweiten Schicht
Node#printout: 3: [object Object]
Node#printout: 4: [object Object]
Ich such wirklich schon ewig nach dem Fehler, nur finde ich ihn nicht.
Ich würde mich freuen, wenn jemand meinen Code besser verstehen könnte als ich und mir helfen könnte! :)