`

dhtmlXTree与json

 
阅读更多

最近才接触到dhtmlXTree,下载地址http://www.dhtmlx.com/

 

感觉这个玩意生成树不错,粗略看了下API,其中有个loadJSONObject的方法,根据示例,只需要简单得定义Json数据对象就能很方便就能生成树:

 

//定义json数据对象
var jsondata = {id:0, item:[{id:1,text:"first"},{id:2, text:"middle", item:[{id:"21", text:"child"}]},{id:3,text:"last"}]};

tree=new dhtmlXTreeObject("div_tree","100%","100%",0);
tree.setImagePath("../../codebase/imgs/csh_bluebooks/");
tree.enableCheckBoxes(true);//是否有checkbox
tree.enableThreeStateCheckboxes(true);
//从json对象中获取数据生成树
tree.loadJSONObject(jsondata);

 

结合实际项目而言,如果我们数据库中有一组数据需要用树来表现,fid表示父id

 

id fid type name remark
X1 X1 1  
X11 X1 2 壹壹  
X12 X1 2 壹贰  
X2 X2 1  
X21 X2 2 贰壹  
X3 X3 2  

 

我们在后台生成json数据对象

{id:0, item:[
    {id:'X1',text:"壹"],item:[
     {id:'X11',text:"壹壹"]},
     {id:'X12',text:"壹贰"]}]},
    {id:'X2', text:"贰"],item:[
     {id:"X21", text:"贰壹"]}]},
    {id:'X3',text:"叁"]}]}

 

之后我们可以根据dhtmlXTree提供的方法对树进行操作,具体可参考dhtmlXTree的API文档,大多数应用中,我们只需要能获取节点的ID就够了,但有些应用中,我们往往希望一个树的节点能保存更多我们需要的信息,或者是在树的初始化时,就能对树进行一些个性化的控制。

在查看过dhtmlXTree提供的文档中,发现一个很有意思的东东,userdata ,也就是说我们可以为每个节点定义自己的userdata ,用来保存我们需要的数据,通过getUserData方法获取这些数据,但是除了setUserData的方法外,我没找到如何在json数据对象中,直接定义userdata ,而loadXML方法中,则可以在XML中直接定义userdata ,如下所示:

<userdata name="desc">数据</userdata>

那json数据能不能直接定义userdata呢?试了很多方式都不成功,于是仔细查了下dhtmlXTree的JS源码。

哈,在dhtmlxtree_json.js文件中,我找到了这样一个方法:dhtmlXTreeObject.prototype._serializeItemJSON

先不去分析这个方法是干什么用的,看其中这句

 

out.push('{ id:"'+itemNode.id+'", '+(this._getOpenState(itemNode)==1?' open:"1", ':'')+(lid==itemNode.id?' select:"1",':'')+' text:"'+text+'", im0:"'+itemNode.images[0]+'", im1:"'+itemNode.images[1]+'", im2:"'+itemNode.images[2]+'" '+(itemNode.acolor?(', aCol:"'+itemNode.acolor+'" '):'')+(itemNode.scolor?(', sCol:"'+itemNode.scolor+'" '):'')+(itemNode.checkstate==1?', checked:"1" ':(itemNode.checkstate==2?', checked:"-1"':''))+(itemNode.closeable?', closeable:"1" ':''));

 

可以看出,我们的json数据对象中的一个节点对象就可以包含如此多的属性:

id,text,im0,im1,im2,open,select,aCol,sCol,checked,closeable

除了id,text,其它可都是能控制树节点状态的,也就是说,我们在产生json数据的时候,接可以直接指定节点的状态。

其中im0,im1,im2,取值字符串,如:'treeimg1.gif',指定节点在展开,收缩,选中三种状态下的图标。

open,select,checked,closeable,取值0和1,分别表示,节点展开,节点被选中,节点的checkbox被勾选,节点是否能被关闭(收缩)。

sCol,aCol,,表示节点被选中或没选中的文字颜色,取值如'#ff0000'

写成josn就成了

var JSON_OBJECT = {id:0, 
   item:[
    {id:'X1',text:"壹",open:'0',im0:'treeimg0.gif',im1:'treeimg1.gif',im2:'treeimg2.gif',select:'1',aCol:'#ff0000',checked:"1",sCol:'#ffff00',closeable:'0',
    item:[

……

……

……

现在我们能通过在json数据对象中对节点的属性赋值,来控制节点的状态了,再看下一段代码:

 

    out.push(", userdata:[");
   var names=itemNode._userdatalist.split(",");
   var p=[];
   for   (var i=0; i<names.length; i++)
     p.push+="{ name:""+names[i]+"" , content:""+itemNode.userData["t_"+names[i]]+"" }";
    out.push(p.join(",")); out.push("]");

 

期盼已久的userdata出现了,在一个for循环中获取数据,哈哈,反之,我们已经知道了该怎样在json中定义userdata了,结合前面的那个数据表把剩余的字段填进去

userdata:[{name:'type',content:'1'},{name:'remark',content:'空'}]

一个josn中节点对象完整的例子如

 

var JSON_OBJECT = {id:0, 
item:[
   {id:'X1',text:"壹",open:'0',im0:'treeimg0.gif',im1:'treeimg1.gif',im2:'treeimg2.gif',
select:'1',aCol:'#ff0000',checked:"1",sCol:'#ffff00',closeable:'0',
userdata:[{name:'type',content:'1'},{name:'remark',content:'空'}]}]};
 

 

想怎样控制就怎样控制,需要什么数据就给什么数据,还有什么不能做的呢

 

分享到:
评论

相关推荐

    (纯Json个人发布Java版)DhtmlxTree+strust2构建异步(动态)加载树

    在这个项目中,JSON被用作后端与前端通信的数据载体,传递树结构的数据。通过将Java对象转换为JSON格式,服务器可以将数据发送到客户端,而无需完整地加载整个树结构,这样可以提高性能,特别是当树包含大量节点时。...

    dhtmlxtree

    总结来说,dhtmlxtree是一个强大的JavaScript树形组件,它通过JSON与服务器进行数据交互,提供灵活的数据加载和丰富的用户交互功能。通过实践项目`dhtmlxtreeTest`,我们可以深入了解dhtmlxtree的用法和与JSON的整合...

    使用xml或者json方式生成dhtmlxtree

    【标题】"使用XML或JSON方式生成dhtmlxtree"主要涉及的是前端数据结构的表示以及与JavaScript库dhtmlxtree的交互。dhtmlxtree是一款用于创建动态HTML树形菜单的JavaScript组件,它允许通过XML或JSON数据格式来构建和...

    专业版dhtmlxtree下载

    这些可能包括通用的样式定义、扩展的API函数、与其他库(如Ajax、JSON)的集成模块等。这个文件帮助开发者更方便地集成dhtmlxtree到现有的项目中,同时提供了一套统一的接口来处理各种常见的任务。 在实际应用中,...

    dhtmlxTree

    - **数据绑定**:可以与各种数据源(如XML、JSON、AJAX)绑定,实现数据的动态更新。 - **扩展性**:可通过插件和API扩展功能,如拖放操作、搜索、编辑等。 **2. 使用步骤** 1. 引入库文件:在HTML文件中添加...

    dhtmlXTree1.6

    **dhtmlXTree1.6** 是一个基于JavaScript的组件,用于在Web应用程序中创建交互式的树状结构。这个组件允许开发者以动态和灵活的方式展示层次化的数据,常见于网站的导航菜单、文件系统或者组织架构等场景。...

    dhtmlxTree树形控件JavaScript

    通常,dhtmlxTree与服务器端进行交互,通过Ajax请求加载和保存数据。可以使用`dhtmlxDataProcessor`类作为数据处理层,它封装了HTTP请求,简化了前后端交互。 9. **国际化与本地化** dhtmlxTree支持多语言,可以...

    第三方树控件dhtmlxTree 3.6

    dhtmlxTree 3.6支持XML、JSON等数据格式,允许开发人员从服务器动态加载或保存树结构。这可以通过`loadXML()`或`loadJSON()`方法实现,使数据与视图保持同步,从而实现动态更新。 **3. 自定义节点** 每个节点都可以...

    dhtmlxtree专业版

    5. **XML/JSON数据格式**:dhtmlxtree可以接收XML或JSON格式的数据来构建树结构,这两种数据格式在Web开发中非常常见,方便与后端服务器进行数据交换。 6. **国际化支持**:为了适应多语言环境,dhtmlxtree支持多种...

    JS树:dhtmlxTree

    5. **数据绑定**:可以与服务器端数据源进行绑定,实现数据的实时更新。 6. **图标和属性**:每个节点可以设置不同的图标和属性,通过这些图标和属性可以更直观地展示节点状态。 7. **拖放功能**:支持拖放操作,...

    dhtmlxtree实例

    该控件具有高度的自定义性,可以轻松地与后端服务器进行数据交互,支持XML、JSON等多种数据格式。 **二、复选框功能** dhtmlxtree的复选框功能使得用户可以选择多个树节点,这在多选场景下非常实用。通过配置相关...

    dhtmlxTree 2.1

    dhtmlxTree可以与各种数据源进行绑定,包括XML、JSON、数组等。这使得动态加载和更新树结构变得简单。你可以根据需要异步加载节点,提高页面的响应速度。 **4. 事件处理** 组件提供了丰富的事件系统,如onClick、...

    dhtmlxTree专业版

    3. **数据绑定**:dhtmlxTree可以绑定到各种数据源,包括XML、JSON、Array等,实现数据的动态加载和更新。 4. **图标支持**:每个节点可以关联自定义图标,以增强视觉效果和信息传达。 5. **拖放功能**:支持节点...

    dhtmlXTree API

    2. **加载数据**:通过`loadXML()`或`loadJSON()`方法从XML或JSON格式的数据源加载节点。 3. **设置属性**:利用`enableItem()`, `disableItem()`, `checkItem()`, `uncheckItem()`等方法改变节点的状态,如启用/...

    js动态树合集dhtmlXTree和dtree.rar

    它支持XML或JSON数据源,可以轻松地与服务器端的数据接口进行集成。dhtmlXTree的API提供了丰富的函数和方法,如添加、删除、更新节点,以及处理用户事件,例如点击、展开和折叠节点。 在使用dhtmlXTree时,开发者...

    dhtmlxtree的一个实用demo

    2. **数据绑定**:学会如何将服务器端的数据结构映射到dhtmlxtree的节点上,这可能涉及到JSON格式的数据交换和Ajax异步加载。 3. **事件处理**:掌握dhtmlxtree提供的各种事件(如点击、拖放、展开/折叠等),并...

Global site tag (gtag.js) - Google Analytics