异步操作的问题充斥了整个过程,以及每个细节。
这棵树实现了如下功能:
a.只加载子目录,子目录的子目录需要点击“展开按钮”才加载
b.点击“目录名”是选中目录
c.选中后就能对它进行添加子节点,修改、删除、访问设置的操作了。(增删查都是异步实现)。
我用Asp.net Mvc + jquery / Ext + Linq + lambda表达式做的文档管理系统。
首先说一下我用Jquery 实现的过程吧。
标准的jquery.treeview.js
小技巧展示:html文件头,加载脚本、样式文件、以及meta标记
看到最后两个js引用了吧?这就是操作这棵树的js代码。贴一下啦!
dir_com.js
dir_edit.js
com里有加载树目录的代码
ajax请求,设置了超时30秒,取消缓存等。然后循环向根目录里添加子目录。
注意到我给每一个UL都treeview了吧?问题就出在这里了。我开始删除了这个UL的treeview样式,但是如果它的里边已经有了LI 和UL节点。下一次就会把样式弄乱了。
幸运的是,如果你给它两次treeview 的话样式还是正常的。所以,浏览目录时的样式是不会出错的。
不幸的是,如果你添加目录,这样就遭了。同级节点的样式就乱了,本来是打开的图标,却显示的是展开的样式;有的更或混杂在一起。
一个解决方案是,用他们自带的jquery.treeview.ansy.js异步文件。但是好像不怎么好用。我就没搞懂。
怎么也搞不好这个混乱的样式了。弄其他的吧,Ext 在树状控件方面做的很好了。但也被我发现了恶心的地方。
Ext 的tree 确实给我们带来了很强大、很方便的操作:
1. 面向对象的节点添加方法,只要node.addChildren(leaf)就行。
2. 丰富的事件操作。
如:tree.expandChildNodes(true)自动展开子节点,node.expand(false, true)展开效果,tree.on('expandnode', function(node) {//做你想做的事}展开事件重载。(我认为这一套操作是很重要的)
3. 再就是一个toolbar。让你轻松操作这棵树!!!
4. 废话不多说了,看我的代码吧!
这个代码实现了增删改,并且点击展开图标加载下一级目录的功能。
如果你想直接定位一个目录并且这个目录是一部加载的,怎么办?
解决方案:
1.在controller里返回这么一组json:
2. 在ext树里边添加这么一个代码:
往哪里放这些代码?你自己决定了!
再看看你的树,是不是能够在加载的时候就自动展开到你想要的节点,然后把它选中呢?
好了,就说到这里了。以后又什么补充的,我会直接以回复的形式追加。