Sto provando a creare una funzione che generi una struttura ad albero in modo tale che ogni elemento contenga un riferimento all'elemento padre.Riferimento funzione ricorsiva Javascript this
Ho una funzione che si chiama quando si creano i bambini ma ci sono momenti difficili con esso, sembra che una volta che viene richiamato da sé this
si riferisce ancora all'elemento di livello superiore anziché a quello corrente.
Registrazione per consolare l'elemento è possibile vedere che il genitore fa sempre riferimento al primo elemento della catena (o è assente) quando è più profondo del primo livello. Crea l'albero, ma i riferimenti al genitore vengono persi per gli elementi oltre al primo.
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, {});
Avere un po 'di problemi a trovare un violino in corso, ma qui è un po' di dati di esempio:
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"}]}');
Solo un errore, stavo sperimentando e ho dimenticato di cambiarlo prima di postare. Risolto il problema qui, il problema è sempre lo stesso. – JPR
Puoi creare fiddle per questo con alcuni dati fittizi? –
Certo, potrebbero essere necessari alcuni minuti per riunirlo. Grazie. – JPR