精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-17
js 代码
el决定了树的显示位置,一般是个div例如
dataUrl决定了树的json数据来源,我这里是一个struts的action,这个action会输出json数据
在服务层要提供一个可以生成json格式数据的service,struts的任务是获取传来的参数调用service方法输出json 我在服务层生成json数据用的是jsonlib包,论坛有详细介绍的帖子,就不多说了 数据库有两个表来构建树,一个是树的节点表,至少包括树的id name 我这里还有一个haschild,代表有没有子节点。 另一个是节点关系表,两列分别是父节点和他对应的子节点。 service层调用dao的方法将结果集组装成List或者Map,再用jsonlib包提供的api将list转化成json,例如 js 代码
在action里面调用这个service方法: java 代码
这样一个完整的树就生成了,现在这个树是只有两层,如果是多层的就需要修改service方法来递归构造一个树的list再转化成json。 异步读取节点:首先,底层的service方法要做到每次生成的是传入参数的下一级节点的list,然后在js的 tree.setRootNode(root);下面加上这句:js 代码
tree.loader.dataUrl 的值需要返回的就是该节点id的下一级的json数据 数据量大的时候异步加载要好的多,服务层也代码比起一次性全部加载的反复递归调用省不少。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-10-18
引用 数据库有两个表来构建树,一个是树的节点表,至少包括树的id name 我这里还有一个haschild,代表有没有子节点。
另一个是节点关系表,两列分别是父节点和他对应的子节点。 为何不用一个表实现呢?我的树表结构如下,请指正: CREATE TABLE Docmnt_Content ( Id int NOT NULL, Name nvarchar(255) NOT NULL, IsLeaf nchar(1) NOT NULL, //即 hasChildren ParentId int NOT NULL, //父节点Id,0表示无父节点的根节点 SortOrder int NOT NULL, //用于节点同级排序 PRIMARY KEY (Id) ) |
|
返回顶楼 | |
发表时间:2007-10-18
当然可以只用一个表了 这是数据库设计的问题了
我上面的例子是直接从项目里拿出来的 只要业务逻辑能正确的组装成树形结构的list就可以了 |
|
返回顶楼 | |
发表时间:2007-10-18
beckrabbit,谢谢回复。
是否考虑过树的拖动改变父节点,或者通过拖动调整同级位置的操作。 |
|
返回顶楼 | |
发表时间:2007-10-18
fangzhouxing 写道 beckrabbit,谢谢回复。
是否考虑过树的拖动改变父节点,或者通过拖动调整同级位置的操作。 添加一个保存的按钮,这个按钮将树按照一定的规则保存成json或者数组什么的 使用DWR把组装好的树的数据传回服务端,服务端的方法解析传过来的数据,将数据保存就可以了 |
|
返回顶楼 | |
发表时间:2007-10-18
我使用DWR, 可以做到即时同步节点的拖动操作。
把整个树传递,数据量好像太大了。 |
|
返回顶楼 | |
发表时间:2007-10-18
fangzhouxing 写道 我使用DWR, 可以做到即时同步节点的拖动操作。
把整个树传递,数据量好像太大了。 的确,如果树比较大的话这样做不好。 但是按照一般的思维方式,做树的节点拖动这种操作一般是调整组织结构什么的, 在最后加一个保存按钮可以保证用户的输入准确度,而且可以加入还原按钮什么的。 如果每次拖动树节点都提交一次数据,拖动多次后如果用户发现树已经混乱了, 还想回到原来状态就不那么好办了,还要再把原来那颗树保存一下 |
|
返回顶楼 | |
发表时间:2007-12-11
引用 tree.on('beforeload', function(node){
tree.loader.dataUrl = 'createTree.do?id='+node.id; }); 我也这样写,为啥点击不能传id啊? |
|
返回顶楼 | |
发表时间:2007-12-14
用火狐跟踪了一下,原来那几行代码没用,因为他传的参数是node,
客户端这样写 loader: new Tree.TreeLoader({ dataUrl:'moduletree.do' }) 服务端只需要request.getparameter("node")即可读取 |
|
返回顶楼 | |
发表时间:2007-12-24
呵呵,谢谢 beckrabbit提供这么好的文章,不知有没有想过用struts2的实现....
|
|
返回顶楼 | |