Tôi đang cố gắng tạo một hàm sẽ tạo ra cấu trúc cây giống như mỗi mục chứa một tham chiếu đến mục cha của nó.Tham chiếu hàm đệ quy Javascript
Tôi có một chức năng tự gọi khi tạo trẻ nhưng có thời gian khó khăn với nó, có vẻ như khi nó được gọi từ bên trong, this
vẫn đề cập đến mục cấp cao nhất thay vì mục hiện tại.
Đăng nhập vào bảng điều khiển mục mà tôi có thể thấy rằng cha mẹ luôn đề cập đến mục đầu tiên trong chuỗi (hoặc vắng mặt) khi sâu hơn cấp đầu tiên. Nó tạo ra cây, nhưng các tham chiếu đến cha mẹ bị mất cho các mục bên cạnh cái đầu tiên.
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, {});
Có một chút khó khăn trong việc fiddle đi, nhưng đây là một số dữ liệu mẫu:
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"}]}');
Chỉ là lỗi đánh máy, tôi đã thử nghiệm và quên thay đổi lại trước khi đăng. Cố định nó ở đây, vấn đề vẫn như cũ. – JPR
Bạn có thể tạo fiddle cho điều này với một số dữ liệu giả? –
Chắc chắn, có thể mất vài phút để kết hợp với nhau. Cảm ơn. – JPR