Ich versuche, eine Funktion zu erstellen, die eine baumartige Struktur generiert, so dass jedes Element einen Verweis auf das übergeordnete Element enthält.Javascript rekursive Funktion Referenz dieser
Ich habe eine Funktion, die sich selbst beim Erstellen der Kinder nennt, aber habe eine harte Zeit damit, es scheint, dass, sobald es von sich selbst aufgerufen wird this
bezieht sich immer noch auf die oberste Ebene Element als die aktuelle.
Logging, um zu konsolen, was das Element ist, kann ich sehen, dass Eltern immer auf das erste Element in der Kette verweist (oder abwesend ist), wenn tiefer als die erste Ebene. Es erstellt den Baum, aber Verweise auf Eltern sind für Elemente neben dem ersten verloren.
var Item = function (item, parent) {
console.log('item is :' + item.name);
this.parent = parent;
console.log('parent is: ' + parent);
var fields = _.union(_.keys(item), _.keys(this.parent));
_.each(_.without(fields, ['parent','children']), function (prop) {
this[prop] = angular.isDefined(item[prop]) ? item[prop] : this.parent[prop];
}, this);
this.children = [];
if (item.children) {
this.children = _.map(item.children, function (child) {
console.log('this is : ' + this);
return new Item(child, this)
}, this);
}
};
var tree = new Item(root, {});
ein wenig Mühe Mit einer Geige in Gang zu bringen, aber hier einige Beispieldaten:
var root = JSON.parse('{"id":"1","name":"root item","root":"1","lft":"1","rgt":"22","level":"1","type":
"category","parent_id":"1","deadline":null,
"children":[
{"id":"2","name":"item 1","root":"1","lft":"14","rgt":"15","level":"2","type":"category","parent_id":"1"},
{"id":"6","name":"item 2","root":"1","lft":"16","rgt":"19","level":"2","type":"category","parent_id":"1"},
{"id":"10","name":"item 3","root":"1","lft":"20","rgt":"21","level":"2","type":"item","parent_id":"1"}]}');
Nur ein Tippfehler, hatte ich experimentiert und vergessen, es vor dem Posten zurück zu ändern. Es ist hier behoben, das Problem ist immer noch das gleiche. – JPR
Kannst du mit Dummy-Daten dafür etwas schaffen? –
Sicher, könnte ein paar Minuten dauern, um es zusammen zu bekommen. Vielen Dank. – JPR