`
txf2004
  • 浏览: 6983646 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

11月,种一棵树

阅读更多

11月过后,北方正式进入寒冬。整个11月,我都在种一棵树,确切的说,我是在建造一个 Web 页面上的树形菜单,并实现其编辑和存储的问题。

我一直一来都喜欢树形菜单,最具体的体现就是我从来都是通过“资源管理器”来管理 Windows 的文件夹。树形菜单直观、简洁,界面布局简单,逻辑清晰。每门语言我都在试图操作其树形结构的菜单,从 VB 开始,到 Delphi、ASP.NET,而 Javascript 自然不能例外。

表面越简洁的东西,身后的逻辑一般越复杂,这似乎是一条规律,树形菜单也是这样。首先是用数据库表这种二维的结构化的数据结构怎么描述和存储树形菜单的问题。好在这个问题已经被天才的程序员们给解决了,而且实现得几乎接近完美。

其次是怎么在Web页面呈现这些树形的逻辑结构。这是一个关键的地方。如果是简单的呈现,则比较容易,取出数据,摆成一个树的形状就可以了。但如何实现桌面编程那样的对树形菜单的增删改操作就不是简单的了。事实上我的精力大量的都花在了这里。首先考虑是自己实现这些功能,但马上就否决了这个愚笨的想法 - 现在不是“造轮子”的时代了,要学会站在巨人的肩膀上嘛。

于是决定选择一个成熟的 js 树形菜单组件。把网上的爱好者和好事者做的那些可疑的东西过滤掉之后,最后选择了三个:jQuery 的 simpleTree,xTree,和 DhtmlxTree。simpleTree 和 xTree 呈现树形菜单非常优秀,通过 Ajax 技术可以实现菜单节点的动态打开,这样就可以“在几秒钟加载几百万条记录”,这是一种优秀的设计,尽管实际上是一种“造假”的技术,看不见的数据实际上就是不存在的,等我们要看的时候他才临时去取回来。但 simpleTree 和 xTree 对 js 树形菜单实际上没有编辑功能,数据库里数据更新后,必须对整棵树的节点进行刷新,再定位到当前节点就是一个不能完成的任务,用户体验十分差。在消耗了大量的时间熟悉、测试了 simpleTree 和 xTree 之后,最后还是放弃了它们。

DhtmlxTree 是我遇到的目前几乎最好的树形菜单。网上流传的是它的 1.5 标准版(free fee),但它的1.3专业版才是一个确实可用的版本,功能多、bug少,但它是需要付费的,几百美元。在网上偶尔才获得了它的1.3专业版,还是一个网友“冒死”从国外搞回来的,当然对我来说它就是盗版了。

DhtmlxTree 现在的最新版是 2.0 版,已经是 dhtmlxSuite2.0 套件的一部分了(http://www.dhtmlx.com/)。dhtmlxSuite2.0 套件包括了大量的 web 前端组件,也分免费的标准版(遵照 GPL license 许可发行)和收费的专业版(有 Commercial License 和 Enterprise License许可)。可惜的是,正好在我用到的 DhtmlxTree2.0 标准版里有一个致命的 bug,不得不放弃,只能使用较低的版本,还好,够用。

树形菜单的编辑、存储,和关系数据库二维数据的操作有很大的不同,必须通过程序(我用了 Ajax 技术)使数据库和 tree 的形状在编辑的同时保持同步,而且在下次打开时不失形,即级别、前后、父子关系不乱套。因为“关系”是树的主要逻辑,所以必须有节点的移动功能,不然用户操作起来很麻烦,我实现了同级别兄弟节点(sibling)的上下移动功能。节点长距离移动也能实现,因涉及到复杂的界面操作,同时考虑到我目前是编辑网站的树形栏目,这个功能需求意义不大,砍掉了。以后若实现的话,想加上节点的拷贝功能,这样建立新节点就方便点了。节点的前后关系在表里必须以一个排序字段来记录,因为按照什么来排序都不合适。但排序问题一直一来就是一个问题,我并不认为我的排序的做法(叫“算法”有点脸红)是很好的,但请教一些号称做过 erp 的程序员,他们也是莫衷一是,看来只能这样了 - 希望2009版本解决这些问题,:)。

搞这个无限级树形菜单编辑系统,最大的工作量和难度不是操作数据库,而是选择Web前端的 js 组件,以及熟悉它、操作它,特别是与后端的表进行同步。我用了 jQuery 框架还稍微快一点,应当说还减少了浏览器的兼容性问题。

11月的大部分时间,我都耗在这棵树上,实际上是耗着心血和生命。要么是把这棵树养活,要么是我吊死在这棵树上,很多次我面临着选择。很多次的山重水复和柳暗花明,很多次去网上寻找答案,很多次在走路中冥想,终于把一棵树养成今天这个样子:不是一棵大树,也不是一棵简单的树。

张庆(网眼) 2008-11-30
来自“网眼视界”:http://blog.why100000.com
“十万个为什么”电脑学习网:http://www.why100000.com
CSDN博客:http://blog.csdn.net/zhangking

分享到:
评论

相关推荐

    服务项目工作规范.docx

    - 单位:以一棵树为基准工作单元 - 特殊要求:修剪10棵树后需清理一次垃圾 **技术要点:** - 使用工具如修枝剪、手锯等。 - 具体步骤包括去除地表萌蘖、修剪枯枝、病枝等,确保树形美观且无病虫害。 ### 2. 球类...

    小学语文一年级下册反义及量词练习大全.pdf

    一面红旗,一棵树,一座山,一片森林,一栋房子,一只狗,一句话,一只羊儿,一个朋友,一座桥,一杯牛奶,一片面包,一艘木船,一团火,一座大桥,一所学校,一条毛巾,一张嘴,一所学校,一首古诗,一滴水,一棵树...

    樟子松种植技术一.doc

    - 一棵成熟的母树在结实中等的年份可采收8斤左右的球果,每人每天可采50-80斤球果,每个球果约含种子25-40粒。 - 球果较为坚硬,脱粒过程较为困难,建议采用室烘干法,将球果放在分层木架的种盘上,室内温度保持在...

    南理工初试试题

    6.在一棵m阶B-树中,若在某结点中插入一个新关键字而引起该结点分裂时,则左边结点有 (11) 个关键字;右边结点的关键字数是 (12) 。 7.求图的最小生成树有两种算法, (13) 算法适合于求稀疏图的最小生成树。 8....

    312植树节主题PPT

    一棵树的价值巨大,它能吸收二氧化碳、释放氧气,减少空气污染,提供栖息地给动植物,还能防止土壤侵蚀,保持水源,对人类社会和自然生态系统都具有无可估量的贡献。 在全球变暖和环境问题日益严重的今天,植树节的...

    三年级科学月考试题.pdf

    1. 区分树叶是否来自同一棵树,要看叶子的形状和颜色是否一致。 2. 拓印树皮图案需将白纸贴紧树干,用蜡笔在纸上涂擦凸起部分。 3. 为了观察更多内容,应提前规划,全面体验并记录观察过程。 4. 大树和小草的相同点...

    二叉排序树与平衡二叉树的实现

     ②在最好情况下,二叉排序树在生成的过程中,树的形态比较匀称,最终得到的是一棵形态与二分查找的判定树相似的二叉排序树,此时它的平均查找长度大约是lgn。 ③插入、删除和查找算法的时间复杂度均为O(lgn)。 ...

    语文量词用法大全-(1).doc

    例如:一棵树、一棵白、一棵草、一棵松、一株水稻、一株麦子等。 5. 表示水果的量词:个。例如:一个苹果、一个橘子、一个柿子、一个梨、一个子、一粒葡萄、一根香蕉等。 6. 表示植物部位的量词:朵、片、条、颗、...

    2007年11月网络管理员模拟试题(一)上午试卷

    ### 2007年11月网络管理员模拟试题(一)上午试卷知识点解析 #### 一、编码与校验位 **题目**: 某数据的7位编码为0110101,若在其最高位之前增加一位偶校验位,则编码为? **解析**: - 原编码为:0110101 - 对于...

    四年级下册数学奥数题.doc

    例如,100米的路每隔10米植一棵树,共植11棵树。 - 在一排树之间种植其他树,如柳树和桃树的例子,中间间隔数乘以每间隔内新植树的数量。 2. **等差数列与数学运算**: - 如“锯木头”的问题,涉及到等差数列的...

    三年级数学上册50题思考题含答案.doc

    1. 距离与数量关系:题目中小红从第一棵树跑到第16棵树跑了150米,可以推算出相邻两棵树之间的距离,进而解决小华从第7棵树跑到第29棵树的距离问题。这是基本的数量关系和等差数列的应用。 2. 平均分配问题:将2米...

    《公共基础知识》考点特训数学运算(2021年版)_2.docx

    圆形花坛周长50m,每隔5m种一棵树,因此共需种50÷5=10棵树,答案是B。 2. 这是一个和差倍比问题。服装店亏损在于卖出的衣服成本(40元)和找给顾客的零钱(60-40=20元),共计亏损60元。赔偿隔壁商店的100元实际上...

    小学生常用量词.doc

    4. **表示植物的量词**:“棵”和“株”常见于树木和草本植物,如一棵树、一株水稻。 5. **表示水果的量词**:基本用“个”,但也有一些特殊情况,如“粒”用于葡萄,“根”用于香蕉。例如,一个苹果、一粒葡萄、一...

    离散数学

    5. **树的同构**:当两棵树的形状相同,即它们的顶点可以一对一映射使得边的连接关系保持不变,我们称这两棵树是同构的。这个概念在图论中很重要,因为它涉及到图的分类和性质的归纳。 6. **图的树形分解**:在复杂...

    2022关于植树活动的通知_植树节活动通知书精选5篇.docx

    - 提供一棵树苗及一把铁锨,建议自备其他工具。 - 报名截止时间为201_年3月23日。 ### 公司植树活动通知要点 - **集合时间**:10月28日8:50,9:00出发。 - **集合地点**:升旗广场。 - **参与人员**:共142人,...

    学校植树节活动部署方案.doc

    - 家庭参与:鼓励学生在家中关注周边的树木,提供必要的支撑,进行浇水和施肥,甚至在自家种植一棵小树,并记录其成长过程。 3. 交流分享:通过电视资料片和科学讲座,收集植物生长的相关知识,于班会中进行分享和...

    2012年11月工作汇报(吴军).pptx

    通过解析HTML文本,程序可以构建出一棵由节点构成的树形结构,便于后续的分析和操作。 - 在C++中,像Safari和Chrome这样的浏览器使用WebKit引擎来实现这个过程,即HTML TEXT通过解析生成DOM TREE。 2. **快速定位...

    小学数学应用题大全(前面试题后面答案).pdf

    例如:“一条路长100米,每隔5米种一棵树,两端都种,共种多少棵树?”需要排除起始点的那棵树。 10. **年龄问题**:涉及到人物年龄的变化,往往需要利用年份差和年龄差来确定现在或过去的年龄。 11. **行船问题**...

    江苏省东海县横沟中学2020学年八年级生物12月月考试题(无答案).doc

    6. 嫁接技术:第六题,一棵苹果树能结出不同品种的苹果,采用的是嫁接技术,将不同品种的枝条嫁接到同一棵树上。 7. 果实的结构:第七题,麻屋子、红帐子、白胖子分别指的是果皮、种皮和种子的结构。 8. 控制蒸腾...

Global site tag (gtag.js) - Google Analytics