DTree中致命的递归
2010-09-14 13:43:23 来源:WEB开发网本文示例源代码或素材下载
前不久我发表过一篇文章,名字叫《可爱又可恨的梅花雪 》,其中介绍了meizz大侠赫赫有名的梅花雪树控件,而且对其中遇到的一些小问题进行了改造,后来有人评论说梅花雪树太复杂,不如DTree来得简便,这个确实如此!DTree的代码看起来要简便很多,所实现的功能也还很丰富(尽管还没有梅花雪树那么强大),在一般的菜单和导航控制中使用会很方便,而且不会有什么问题。我在改造梅花雪树之前,也曾尝试过DTree,并且也对其中的一些方法进行了改造,但后来不得不放弃,因为DTree中致命的递归导致了在大数据量构造树的节点时js报堆栈溢出的错误!
先看看我对DTree的改造。
1. DTree中图片的引用路径被写死在js代码里,这个完全可以写成一个变量,在需要时更改。
var imgPath = "img";
// Tree object
function dTree(objName) {
this.config = { target: null, folderLinks: true, useSelection: true, useCookies: true, useLines: true, useIcons: true, useStatusText: false, closeSameLevel: false, inOrder: false };
this.icon = { root: imgPath + "/base.gif", folder: imgPath + "/folder.gif", folderOpen: imgPath + "/folderopen.gif", node: imgPath + "/page.gif", empty: imgPath + "/empty.gif", line: imgPath + "/line.gif", join: imgPath + "/join.gif", joinBottom: imgPath + "/joinbottom.gif", plus: imgPath + "/plus.gif", plusBottom: imgPath + "/plusbottom.gif", minus: imgPath + "/minus.gif", minusBottom: imgPath + "/minusbottom.gif", nlPlus: imgPath + "/nolines_plus.gif", nlMinus: imgPath + "/tree/nolines_minus.gif" };
this.obj = objName;
this.aNodes = [];
this.aIndent = [];
this.root = new Node(-1);
this.selectedNode = null;
this.selectedFound = false;
this.completed = false;
}
更多精彩
赞助商链接