我想構建一個使用JavaScript的層次結構(樹結構)。爲此,我寫了一個表示樹中節點的類Node
。當我從數據庫中檢索數據時,它們都被正確地檢索到(即:根節點的空值爲ParentId
,它有3個子節點指向它作爲父節點,並且後代節點的設置也正確。 )。但是當我嘗試將它們映射到我的JavaScript模型時,根節點的Children
屬性結束爲undefined
。我不知道即使在運行時,如何輸出控制檯中的Children
屬性的內容,我可以看到添加到它的子節點。這裏是我的代碼:將項目添加到它後重置爲undefined
var Node = function (obj) {
var self = this;
var isDefined = obj != undefined;
self.hasChildren = function() {
return self.Children.length > 0;
};
self.hasParent = function() {
var p = self.ParentId;
return !(p == null || p == undefined || p == 0);
};
self.addChildren = function (objArray) {
if (!$.isArray(self.Children)) {
self.Children = [];
}
for (var i = 0; i < objArray.length; i++) {
self.addChild(objArray[i]);
}
};
self.addChild = function (obj) {
if (obj instanceof Node) {
self.Children.push(obj);
} else {
var n = new Node(obj);
self.Children.push(n);
}
};
self.removeChild = function (n) {
var index = self.Children.indexOf(n);
if (index > -1) {
self.Children.splice(index, 1);
}
};
self.Id = isDefined ? obj.Id : null;
self.ParentId = isDefined ? obj.ParentId : null;
self.Name = isDefined ? obj.Name : '';
self.Children = isDefined ? self.addChildren(obj.Children) : [];
self.TypeId = isDefined ? obj.TypeId : null;
};
我想到了addChildren
法的方式,我會通過來自服務器的原始JSON對象到Node
對象的構造函數,然後如果有任何子女(其中基本上具有與父母相同的屬性),則將調用addChildren
,這將爲每個元素創建新的Node
。最終,該樹將遞歸構建。
那麼我哪裏出錯了?爲什麼Children
房產最終成爲undefined
?
向我們展示您用於創建Node對象的代碼以及調用未定義'.Children'的方法的代碼。 – jfriend00 2013-02-28 07:21:49
@Nucleon,是的,這是意圖。節點的孩子只是它的直接孩子,而不是所有的後代。 – Kassem 2013-02-28 07:33:33