DHTMLX Tree中文开发指导.docx_第1页
DHTMLX Tree中文开发指导.docx_第2页
DHTMLX Tree中文开发指导.docx_第3页
DHTMLX Tree中文开发指导.docx_第4页
DHTMLX Tree中文开发指导.docx_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DHTMLX Tree中文开发指导专业版1.6下载地址(CSDN)版本号:dhtmlxTree v.1.6 Professional edition build 71114最近开发项目使用到了dhtmlXtree做权限设置,看了网上相关的中文资料很少,就把官方的资料翻译了下,一共分2部分,API可以参考官方文档:/docs/download.shtml效果图如下(三态树):dhtmlXTree指南与实例主要特性多浏览器/多平台支持全部由JavaScript控制动态加载XML支持大数据树动态翻译(智能XML解析)拖拽(同一个树,不同的树之间,不同的框架之间)带多选框(CheckBox)的树(两态/三态)定制图标(使用JavaScript或xml)内容菜单(与dhtmlxMenu集成)结点数据为用户数据多行结点高稳定性支持Macromedia Cold Fusion支持Jsp支持ASP.NET支持以下浏览器IE 5.5或更高版本Mac OS X SafariMozilla 1.4 或更高版本FireFox 0.9 或更高版本Opera (Xml加载支持取决于浏览器版本)使用dhtmlXTree进行开发在页面初始化对象divid=treeBox );tree.enableCheckBoxes(false);tree.enableDragAndDrop(true);构造器有以下参数:加载树的容器对象(应该在调用构造器之前被加载)树的宽度树的高度树根的父结点的id(超级根)指定树的其他参数:setImagePath(url) - 设置树所使用的图片目录地址enableCheckBoxes(mode) - 打开/关闭多选框(默认打开)enableDragAndDrop(mode) - 打开/关闭拖拽模式设置事件处理1.5以上的版本支持一种新的设置事件的方式-使用attachEvent方法.设置一个事件处理方法需要知道事件的名字和所调用的方法.可用的事件名参考这里(以后会翻译),在事件处理方法中,可以这样引用树对象:divid=treeBox ,onNodeSelect)/setfunctionobjecttocallonnodeselect/seeotheravailableeventhandlersinAPIdocumentationfunctiononNodeSelect(nodeId).很多时候函数要从参数中获取值.关于传值得详细信息请参考事件文档(以后翻译)使用脚本增加结点tree=newdhtmlXTreeObject(treeBox,100%,100%,0);.tree.insertNewChild(0,1,NewNode1,0,0,0,0,SELECT,CALL,TOP,CHILD,CHECKED);tree.insertNewNext(1,2,NewNode2,0,0,0,0,CHILD,CHECKED);第4-7的参数都是0(选择后调用的方法,所使用的图片)意味着都使用默认值最后一个使用逗号分隔的参数可以是以下值(只能是大写):SELECT - 插入后选择此结点CALL - 在选择时调用方法TOP - 在最上方插入此结点CHILD - 此结点有子结点CHECKED - 此结点的多选框被选中(如果有的话)使用XML加载数据tree=newdhtmlXTreeObject(treeBox,100%,100%,0);tree.setXMLAutoLoading(/xml/tree.xml);tree.loadXML(/xml/tree.xml);/loadrootlevelfromxml在调用时,被打开的结点id(就像url参数一样)将会被增加到初始化XMLAutoLoading(url) 的URL地址上去调用loadXML(url)方法不会增加id到url地址上调用无参的loadXML()将会使用XMLAutoLoading(url)所指定的url地址XML语法:PHP脚本需要在页面头添加以下代码:?phpif(stristr($_SERVERHTTP_ACCEPT,application/xhtml+xml)header(Content-type:application/xhtml+xml);elseheader(Content-type:text/xml);echo(/n);?结点是必须有的.指定加载数据的父结点.这个id参数指定了父结点id.加载根层需要在创建树的时候指定id:new myObjTree(boxObject,width,height,0)可以包含(为了一次加载多层结点)或者不包含子结点.并且可以包含标签,可以为结点标签(label)增加一些HTML (text属性将会被忽略)!CDATALabel必要属性有:text -结点显示的标签id -结点id可选属性有:tooltip -鼠标放在结点上提示的信息im0 - 没有子结点的结点显示的图片(将会从setImagePath(url)方法指定的路径去获取图片)im1 - 包含子结点的结点展开时显示的图片im2 - 包含子结点的结点关闭时显示的图片aCo1 - 没有选中的结点的颜色sCol - 选中的结点的颜色select - 在加载时选择此结点(可以为任意值)style - 结点文本风格open - 展开此结点(可以为任意值)call - 选择时调用函数(可以为任意值)checked - 如果存在的话,选择此结点的多选框(可以为任意值)child - 指定结点是否有子结点(1:有,0:无)imheight - 图标的高度imwidth - 图标的宽度topoffset - 设置结点和上层结点间的偏移量radio - 如果非空 则此结点的子结点会有单选按钮直接在XML里面设置用户数据可以使用标签,此标签只有一个参数:name和value 去指定用户数据值 为结点定制图标有两种方法去定制结点图标,这取决于增加结点的方式.注意:树将会从setImagePath(url)方法指定的路径去获取结点图片.Javascript的方式:使用insertNewChild(.)或者insertNewNext(.)方法的参数指定varim0=doc.gif;/icontoshowifnodecontainsnochildrenvarim1=opened.gif;/ifnodecontainschildrenandopenedvarim2=closed.gif;/ifnodecontainschildrenandclosedtree.insertNewItem(0,1,NewNode1,0,im0,im1,im2);tree.insertNewNext(1,2,NewNode2,0,txt.gif,opened.gif,closed.gif);XML的方式.使用标签的属性:im0 - 没有子结点的结点显示的图片(将会从setImagePath(url)方法指定的路径去获取图片)im1 - 包含子结点的结点展开时显示的图片im2 - 包含子结点的结点关闭时显示的图片构建动态树如果树包含很大数量的结点(或者你只是不想浪费时间去加载隐藏的结点),按照需要去加载他们似乎是更好的选择,而不是一次性的全部加载进来.因此我们使用XML动态加载树.请参考使用XML加载数据或者查阅Dynamical Loading in dhtmlxTree v.1.x操作结点一些使用树的方法来操作结点的例子:tree=newdhtmlXTreeObject(treeboxbox_tree,100%,100%,0);.varsID=tree.getSelectedItemId();/getidofselectednodetree.setLabel(sID,NewLabel);/changelabelofselectenodetree.setItemColor(sID,blue,red);/setcolorsforselectednodeslabel(fornotselectedstateandforselectedstate)tree.openItem(sID);/expandselectednodetree.closeItem(sID);/closeselectednodetree.changeItemId(sID,100);/changeidofselectednodeto100alert(Thisnodehaschildren:+tree.hasChildren(100);/showalertwithinformationifthisnodehaschildren序列化树序列化方法允许从xml表现形式(xml字符串)中获取树.不同程度的序列化会在生成的XML字符串的属性上面反映出来 tree.setSerializationLevel(userDataFl,itemDetailsFl);varmyXmlStr=tree.serializeTree();没有参数的序列化- id,open,select,text,child参数userDataFl true - userdata参数itemDetailsFl true - im0,im1,im2,acolor,scolor,checked,openTooltips (鼠标放在结点上所提示的内容)有三种方法去设置tooltip :使用结点的label(textitem结点的text属性)作为tooltip - enableAutoTooltips(mode) - 默认为false使用item结点的tooltip属性作为tooltip(如果此属性被设置了则默认使用此方法)使用setItemText(itemId,newLabel,newTooltip) 方法移动结点编程式的移动可以使用以下方法:向上/下/左移动:tree.moveItem(nodeId,mode)mode可以是以下值:down - 把结点移动到下方(不用再意层次关系)up - 把结点移动到上方left - 把结点直接移动到上层位置直接移动到指定位置(在树内部)tree.moveItem(nodeId,mode,targetId)mode可以是以下值:item_child - 把结点移动到第三个参数子结点的位置作为子结点item_sibling -把结点移动到第三个参数兄弟结点的位置作为兄弟结点targetId- 目标结点的Id To move node into position (to another tree) 移动结点到指定位置(另一个树)tree.moveItem(nodeId,mode,targetId,targetTree)mode的值参考以上两个例子targetId- 目标结点的Id(在targetTree里面的id).targetTree- 目标树对象 剪切/粘贴的方式 另一种方式是使用doCut()和doPaste(id)函数-但是这种方法只能对选中的结点有效.程序员也可以从一个位置删除一个结点然后再另外一个地方再创建一个(也是个办法:-).提供给用户拖拽功能去移动结点 结点计数器可以显示指定结点标签(label)的结点子元素的数量.激活此方法使用以下代码:tree.setChildCalcMode(mode);mode 可以是以下值:child - 这层的所有子结点leafs - 这层的所有没有子结点的子结点childrec - 所有子结点leafsrec -没有子结点的所有子结点disabled -什么都没有其他相关方法: _getChildCounterValue(itemId) - 得到当前的记数值 setChildCalcHTML(before,after) - 包含计数器的html代码 如果在动态加载中需要设定计数器的值,请在xml中使用child属性智能XML解析智能XML解析的概念很简单-整个树结构是从客户端加载的,但是只有应该被显示的结点才会被展示出来.很有效的减少了加载时间和大数据量树的性能.另外-与动态加载相反的是-脚本方法可以使用整个树结构(比如搜索整个树-而不是只有被显示出来的)用以下方法激活智能XML解析:tree.enableSmartXMLParsing(true);/falsetodisable在树被完全展开的时候只能XML解析不会产生作用树的多选框dhtmlxTree支持两态和三态树.三态树有三种状态:选中/未选中/某些子结点被选中(不是全部)用以下方法激活三态树:tree.enableThreeStateCheckboxes(true)/falsetodisable使用智能XML解析的话需要手工设置第三种状态(checked=-1);Checkboxes可以被禁用-disableCheckbox(id,state)一些结点可以隐藏checkboxes - showItemCheckbox(id,state) (nocheckboxxml 属性)版本1.4以后 showItemCheckbox可以对整棵树使用(第一个参数使用0或者null)树的单选框dhtmlxTree支持但选按钮 使用以下代码对整棵树进行设置tree.enableRadiobuttons(true);对某些特定的结点使用单选按钮(代替多选框)tree.enableCheckboxes(true);tree.enableRadiobuttons(nodeId,true);默认情况下单选按钮是根据层次分组的,但是版本1.4以后可以对整棵树进行设置:tree.enableRadiobuttons(true)Checkboxs相关的API和XML属性也适用于radiobuttons(参考radiobuttons方法描述)拖拽技术拖拽有三种模式(使用setDragBehavior(mode)方法进行设置)当作子结点拖拽-child当作兄弟结点拖拽-sibling复合模式(前两种模式一起)- complex 每一种模式还有两种子模式:1. 普通拖拽2. 复制拖拽 - tree.enableMercyDrag(1/0)所有模式都可以在运行时改变 事件处理在处理结点放下之前的事件使用-attachEvent(onDrag,func)如果func没有返回true,将会取消拖拽.将结点放下后会有另一个事件-onDrop-使用attachEvent(OnDrop,func)进行处理.两种方法都会传给func对象5个参数被拖拽结点的id目标结点的id前目标结点(如果拖拽的是兄弟结点)源树对象目标树对象两个框架之间的拖拽默认情况下框架间的拖拽是开启的.只需要把下列代码加在页面上没有树的地方newdhtmlDragAndDropObject();提高性能如果生成DHTML树的性能很低,有两种途径去改进大数据树的性能:1.Dynamical Loading(动态加载)2.Smart XML Parsing(智能XML解析)3.Distributed Parsing(分布式解析)4.Smart Rendering(动态显示)另外确保你的树组织的很好-把很多个结点放在同一层很不美观并且降低性能,虽然分布式解析或者智能显示可以解决这个问题上下文菜单在dhtmlxTree里面可以构建上下文菜单.菜单的上下文可以使用XML或者脚本进行设置.改变上下文菜单内容取决于树结点开发人员可以实现函数隐藏/显示同一个菜单的结点或者不同菜单的不同结点.下面的代码激活上下文菜单/initmenuaMenu=newdhtmlXContextMenuObject(120,0,./codebase/imgs/);aMenu.menu.loadXML(menu/_context.xml);aMenu.setContextMenuHandler(onMenuClick);/inittreetree=newdhtmlXTreeObject(treeboxbox_tree,100%,100%,0);.tree.enableContextMenu(aMenu);/linkcontextmenutotreefunctiononMenuClick(id)alert(Menuitem+id+wasclicked);HTTPS 兼容为了兼容HTTPS,我们需要为上下文菜构造器增加两个参数Images URLDummy page URL (url of the page to use for iframes src /now they are empty as iframes are used to make menu be positioned under selectboxes in IE/ in menu to make it compatible with https)/initmenucompatiblewithsHTMLaMenu=newdhtmlXContextMenuObject(120,0,imgs/,empty.html);.刷新结点refreshItems(itemIdList,source) 仅刷新itemIdList里面的结点(不包含它们的子结点)refreshItem(itemId) - 刷新itemId指定的子结点.自动加载会被激活结点排序专业版本中可以对结点进行排序(需要dhtmlxtree_sb.js)使用以下方式:根据标签(label)文本(如果没有定制比较描述符)tree.sortTree(nodeId,order,all_levels);nodeId- 开始排序层的父结点id(如果是超级根Id,排序整棵树)order- 排序方向:升序/降序all_levels- 如果为true,则所有子层都会被排序 /defineyourcomparator(inourcaseitcomparessecondwordsinlabel)functionmySortFunc(idA,idB)a=(tree.getItemText(idA).split()1|;b=(tree.getItemText(idB).split()1|;return(ab)?1:-1);tree=new./attachyourcomparatortothetreetree.setCustomSortFunction(mySortFunc);比较函数有两个结点id,使用树对象和id返回一个比较结果.如果定制比较函数被指定.则tree.sortTree(.)方法使用此函数排序 查找功能dhtmlxTree的查找功能允许开发人员把注意力从匹配标签(label)搜索码中解脱出来,支持智能XML解析脚本语法tree.findItem(searchString);/finditemnexttocurrentselectiontree.findItem(searchString,1,1)/finditemprevioustocurrentselectiontree.findItem(searchString,0,1)/searchfromtop例子包含在专业版中-samples/treeExPro2.html多行结点允许在多行显示树结点.建议关掉避免影响外观.开启多行功能需要以下代码:tree.enableTreeLines(false);tree.enableMultiLineItems(true);例子包含在专业版中-samples/treeExPro6.html树的图标设置图标有一种方法可以使用脚本设置图标(setItemImage,setItemImage2)或者xml (im0,im1,im2 attributes of item node):im0 - 没有子结点的结点im1 - 有子结点的关闭结点im2 - 有子结点的打开结点设置图标大小有一种方法可以使用脚本或者xml为整棵树或者每个结点设置图标大小: XML设置每个结点的图标大小(可选):脚本语法:tree.setIconSize(w,h);/setglobaliconsizetree.setIconSize(w,h,itemId)/seticonsizeforparticularitem键盘导航默认情况下dhtmlxTree没有支持键盘功能,但是可以在页面中增加dhtmlxtree_kn.js 文件去开启键盘支持,只需要下面一条指令:tree.enableKeyboardNavigation(true);默认按键:Up arrow - 选择上面的结点Down arrow - 选择下面的结点Right arrow - 打开结点Left arrow - 关闭结点Enter - 调用结点方法也可以指定自己的按键如下:tree.assignKeys(up,104,down,98,open,102,close,100,call,101);up/down/open/close/call是可用的动作,数字是按键代码 分布式解析另一种增加大数据树(每层100-200个结点)性能的方法是分布式解析,这个是企业版才有的功能.最大的好处是可以在树完全被解析之前看到树的层次并准备使用.使用以下命令激活这个功能:tree.enableDistributedParsing(mode,count,timeout);参数:mode - 必要参数- true/false - 开启/关闭分布解析count - 可选参数- 分配结点的数量。澳门新濠天地官网66timeout - 可选参数- 两部分结点之间延迟的毫秒数,这个功能完全和智能XML解析兼容错误处理一些dhtmlxTree异常可以被捕获并且处理functionmyErrorHandler(type,desc,erData)alert(erData0.status)dhtmlxError.catchError(ALL,myErrorHandler);支持错误类型:AllLoadXML处理函数参数:type - 字符串(如上)desc - 错误描述(硬编码)erData - 错误相关对象数组(如下).TypeObject(s)LoadXML0 - response objectCold Fusion 标签. - optional name of the tree js object to use in javascript, if skiped, then name autogeneratedwidth - optional width of the tree (definitely it sets the with of the tree box, leaving the with of the tree itself by 100%)height - optional height of the treeJSPath - optional absolute or relative path to directory which contains tree js files, js directory by defaultCSSPath - optional absolute or relative path to directory which contains tree css files, css directory by defaulticonspath - optional absolute or relative path to directory which contains tree icon files, img directory by defaultxmldoc - mandatory for xml loading url of the xml file used to load levels dynamicallycheckboxes - optional show checkboxes (none, twoState, threeState)dragndrop - optional activate drag-&-drop (true,false)style - optional style for the tree boxonSelect - optional javascript function to call on node selectiononcheck - optional javascript function to call on node (un)checkingonDrop - optional javascript function to call on node dropim1 - optional default image used for child nodesim2 - optional default image used for opened branchesim3 - optional default image used for closed branches For description of optional configuration xml - see chapterLoading data with XMLMinimal possible tag syntax with on-page xml:Minimal possible tag syntax with server-side xml:With images specified:With Events Handlers,Checkboxes and Drag-n-drop:可编辑结点1.3版本后dhtmlxTree专业版可以使用可编辑结点.只须在页面中引用dhtmlxtree_ed.js去开启这个功能:tree.enableItemEditor(mode);参数如下:mode - 必要参数- true/false - 开启/关闭可编辑结点Event: 使用事件处理可以处理可编辑结点的不同阶段的事件,可以使用attachEvent(onEdit,handlerFunc)来设置. 在编辑过程中有4个不同的阶段:开始编辑前(可取消),编辑开始后,编辑结束前(可取消),编辑结束后 处理方法的4个参数如下:state - 0 开始编辑前, 1 编辑开始后, 2 编辑结束前, 3 编辑结束后id - 可编辑结点的idtree - 树对象value - 只有2阶段可以使用,编辑的值同步与服务器更新通常的树操作-比如拖拽(包括不同树间的),删除结点,插入结点,更新结点标签(label)-在1.3版本后可以使用数据处理模型(dataProcessor module)与服务器上的数据库进行同步更新.主要特性如下:更新/插入结点,使用黑体字,删除结点-使用一条横线穿过可以定义数据处理模式(自动/手动).更新/删除结点的数据发送到指定的服务器URL(我们叫它服务器处理器).服务器处理器应该可以返回普通的xml和自定的格式化格式(如下),让树知道服务器是否成功进行处理,所有存储后的过程都会被自动处理 使用以下步骤开启此功能:页面中包含dhtmlxdataprocessor.js为树创建数据处理(dataProcessor)对象.tree.init();myDataProcessor=newdataProcessor(serverProcessorURL);myDataProcessor.init(treeObj);dataProcessor构造器参数如下:serverProcessorURL - 必要参数- 处理接收数据文件的Url地址.如果使用服务器端运行.那么就是dhtmlxDataProcessor/server_code/PHP/update.php?ctrl=treemyDataProcessor.init方法的参数是:treeObj - 必要参数- 分配数据处理器(dataProcessor )的树对象如果不需要使用built-in服务器处理器(ser

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论