DHTMLX Tree中文开发指导
专业版1.6下载地址(CSDN)
版本号:dhtmlxTree v.1.6 Professional edition build 71114
最近开发项目使用到了dhtmlXtree做权限设置,看了网上相关的中文资料很少,就把官方的资料翻译了下,一共分2部分,API可以参考官方文档:http://dhtmlx.com/docs/download.shtml
效果图如下(三态树):
dhtmlXTree 指南与实例
主要特性
- 多浏览器/多平台支持
- 全部由JavaScript控制
- 动态加载
- XML支持
- 大数据树动态翻译(智能XML解析)
- 拖拽(同一个树,不同的树之间,不同的框架之间)
- 带多选框(CheckBox)的树(两态/三态)
- 定制图标(使用JavaScript或xml)
- 内容菜单(与dhtmlxMenu集成)
- 结点数据为用户数据
- 多行结点
- 高稳定性
- 支持Macromedia Cold Fusion
- 支持Jsp
- 支持ASP.NET
支持以下浏览器
- IE 5.5或更高版本
- Mac OS X Safari
- Mozilla 1.4 或更高版本
- FireFox 0.9 或更高版本
- Opera (Xml加载支持取决于浏览器版本)
使用dhtmlXTree进行开发
- <div id="treeBox" );
- tree.enableCheckBoxes(false);
- tree.enableDragAndDrop(true);
- </script>
- 加载树的容器对象(应该在调用构造器之前被加载)
- 树的宽度
- 树的高度
- 树根的父结点的id(超级根)
指定树的其他参数:
- setImagePath(url) - 设置树所使用的图片目录地址
- enableCheckBoxes(mode) - 打开/关闭多选框(默认打开)
- enableDragAndDrop(mode) - 打开/关闭拖拽模式
设置事件处理
- <div id="treeBox" ,onNodeSelect)//set function object to call on node select
- //see other available event handlers in API documentation
- function onNodeSelect(nodeId){
- ...
- }
- </script>
- <script>
- tree=new dhtmlXTreeObject('treeBox',"100%","100%",0);
- ...
- tree.insertNewChild(0,1,"New Node 1",0,0,0,0,"SELECT,CALL,TOP,CHILD,CHECKED");
- tree.insertNewNext(1,2,"New Node 2",0,0,0,0,"CHILD,CHECKED");
- </script>
- 第4-7的参数都是0(选择后调用的方法,所使用的图片)意味着都使用默认值
- 最后一个使用逗号分隔的参数可以是以下值(只能是大写):
- SELECT - 插入后选择此结点
- CALL - 在选择时调用方法
- TOP - 在最上方插入此结点
- CHILD - 此结点有子结点
- CHECKED - 此结点的多选框被选中(如果有的话)
使用XML加载数据
- <script>
- tree=new dhtmlXTreeObject('treeBox',"100%","100%",0);
- tree.setXMLAutoLoading("http://127.0.0.1/xml/tree.xml");
- tree.loadXML("http://127.0.0.1/xml/tree.xml");//load root level from xml
- </script>
- 在调用时,被打开的结点id(就像url参数一样)将会被增加到初始化XMLAutoLoading(url) 的URL地址上去
- 调用loadXML(url)方法不会增加id到url地址上
- 调用无参的loadXML()将会使用XMLAutoLoading(url)所指定的url地址
XML语法:
- <?xml version='1.0' encoding='iso-8859-1'?>
- <tree id="0">
- <item text="My Computer" id="1" child="1" im0="my_cmp.gif" im1="my_cmp.gif" im2="my_cmp.gif" call="true" select="yes">
- <userdata >
PHP脚本需要在页面头添加以下代码:
- <?php
- if ( stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ) {
- header("Content-type: application/xhtml+xml"); } else {
- header("Content-type: text/xml");
- }
- echo("<?xml version=/"1.0/" encoding=/"iso-8859-1/"?>/n");
- ?>
<tree>结点是必须有的.指定加载数据的父结点.这个id参数指定了父结点id.加载根层需要在创建树的时候指定id:new myObjTree(boxObject,width,height,0)
<itrem>可以包含(为了一次加载多层结点)或者不包含子结点.并且可以包含<itemtext>标签,可以为结点标签(label)增加一些HTML (text属性将会被忽略)
- <item id="123">
- <itemtext><![CDATA[<font color="red">Label</font>]]></itemtext>
- </item>
必要属性有:
- text - 结点显示的标签
- id - 结点id
可选属性有:
- tooltip - 鼠标放在结点上提示的信息
- im0 - 没有子结点的结点显示的图片(将会从setImagePath(url)方法指定的路径去获取图片)
- im1 - 包含子结点的结点展开时显示的图片
- im2 - 包含子结点的结点关闭时显示的图片
- aCo1 - 没有选中的结点的颜色
- sCol - 选中的结点的颜色
- select - 在加载时选择此结点(可以为任意值)
- style - 结点文本风格
- open - 展开此结点(可以为任意值)
- call - 选择时调用函数(可以为任意值)
- checked - 如果存在的话,选择此结点的多选框(可以为任意值)
- child - 指定结点是否有子结点(1:有,0:无)
- imheight - 图标的高度
- imwidth - 图标的宽度
- topoffset - 设置结点和上层结点间的偏移量
- radio - 如果非空 则此结点的子结点会有单选按钮
直接在XML里面设置用户数据可以使用<userdata>标签,此标签只有一个参数:
- name
和 value 去指定用户数据值
为结点定制图标
- <script>
- var im0 = "doc.gif";//icon to show if node contains no children
- var im1 = "opened.gif";//if node contains children and opened
- var im2 = "closed.gif";//if node contains children and closed
- tree.insertNewItem(0,1,"New Node 1",0,im0,im1,im2);
- tree.insertNewNext(1,2,"New Node 2",0,"txt.gif","opened.gif","closed.gif");
- </script>
- <?xml version='1.0' encoding='iso-8859-1'?>
- <tree id="0">
- <item text="My Computer" id="1" child="1" im0="doc.gif" im1="my_opened.gif" im2="my_closed.gif">
- </tree>
- im0 - 没有子结点的结点显示的图片(将会从setImagePath(url)方法指定的路径去获取图片)
- im1 - 包含子结点的结点展开时显示的图片
- im2 - 包含子结点的结点关闭时显示的图片
- <script>
- tree=new dhtmlXTreeObject('treeboxbox_tree',"100%","100%",0);
- ...
- var sID = tree.getSelectedItemId();//get id of selected node
- tree.setLabel(sID,"New Label");//change label of selecte node
- tree.setItemColor(sID,'blue','red');//set colors for selected node's label (for not selected state and for selected state)
- tree.openItem(sID);//expand selected node
- tree.closeItem(sID);//close selected node
- tree.changeItemId(sID,100);//change id of selected node to 100
- alert("This node has children: "+tree.hasChildren(100));//show alert with information if this node has children
- </script>
- <script>
- tree.setSerializationLevel(userDataFl,itemDetailsFl);
- var myXmlStr = tree.serializeTree();
- </script>
- 没有参数的序列化- id,open,select,text,child
- 参数userDataFl true - userdata
- 参数itemDetailsFl true - im0,im1,im2,acolor,scolor,checked,open
- 使用结点的label("text"item结点的text属性)作为tooltip - enableAutoTooltips(mode) - 默认为false
- 使用item结点的"tooltip"属性作为tooltip(如果此属性被设置了则默认使用此方法)
- 使用setItemText(itemId,newLabel,newTooltip) 方法
- tree.moveItem(nodeId,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)函数-但是这种方法只能对选中的结点有效.程序员也可以从一个位置删除一个结点然后再另外一个地方再创建一个(也是个办法:-)).提供给用户拖拽功能去移动结点
结点计数器
- <script>
- tree.setChildCalcMode(mode);
- </script>
- "child" - 这层的所有子结点
- "leafs" - 这层的所有没有子结点的子结点
- "childrec" - 所有子结点
- "leafsrec" -没有子结点的所有子结点
- "disabled" - 什么都没有
其他相关方法: _getChildCounterValue(itemId) - 得到当前的记数值 setChildCalcHTML(before,after) - 包含计数器的html代码 如果在动态加载中需要设定计数器的值,请在xml中使用child属性
- <script>
- tree.enableSmartXMLParsing(true);//false to disable
- </script>
- <script>
- tree.enableThreeStateCheckboxes(true)//false to disable
- </script>
- <item checked="-1" ...>
- <item checked="1" .../>
- <item .../>
- </item>
- <script>
- tree.enableRadiobuttons(true);
- </script>
- <script>
- tree.enableCheckboxes(true);
- tree.enableRadiobuttons(nodeId,true);
- </script>
- tree.enableRadiobuttons(true)
- 当作子结点拖拽-"child"
- 当作兄弟结点拖拽-"sibling"
- 复合模式(前两种模式一起)- "complex" 每一种模式还有两种子模式:
- 1. 普通拖拽
- 2. 复制拖拽 - tree.enableMercyDrag(1/0)
所有模式都可以在运行时改变
事件处理
在处理结点放下之前的事件使用-attachEvent("onDrag",func)如果func没有返回true,将会取消拖拽.将结点放下后会有另一个事件-onDrop-使用attachEvent("OnDrop",func)进行处理.两种方法都会传给func对象5个参数
- 被拖拽结点的id
- 目标结点的id
- 前目标结点(如果拖拽的是兄弟结点)
- 源树对象
- 目标树对象
两个框架之间的拖拽
- <script src="codebase/dhtmlxcommon.js"></script>
- <script>
- new dhtmlDragAndDropObject();
- </script>
- <script>
- //init menu
- aMenu=new dhtmlXContextMenuObject('120',0,"../codebase/imgs/");
- aMenu.menu.loadXML("menu/_context.xml");
- aMenu.setContextMenuHandler(onMenuClick);
- //init tree
- tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0);
- ...
- tree.enableContextMenu(aMenu); //link context menu to tree
- function onMenuClick(id){
- alert("Menu item "+id+" was clicked");
- }
- Images URL
- Dummy 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)
- <script>
- //init menu compatible with sHTML
- aMenu=new dhtmlXContextMenuObject('120',0,"imgs/","empty.html");
- ...
- </script>
- refreshItems(itemIdList,source) 仅刷新itemIdList里面的结点(不包含它们的子结点)
- refreshItem(itemId) - 刷新itemId指定的子结点.自动加载会被激活
- tree.sortTree(nodeId,order,all_levels);
- nodeId - 开始排序层的父结点id(如果是超级根Id,排序整棵树)
- order - 排序方向:"升序"/"降序"
- all_levels - 如果为true,则所有子层都会被排序
- //define your comparator (in our case it compares second words in label)
- function mySortFunc(idA,idB){
- a=(tree.getItemText(idA)).split(" ")[1]||"";
- b=(tree.getItemText(idB)).split(" ")[1]||"";
- return ((a>b)?1:-1);
- }
- tree = new ...
- //attach your comparator to the tree
- tree.setCustomSortFunction(mySortFunc);
比较函数有两个结点id,使用树对象和id返回一个比较结果.如果定制比较函数被指定.则tree.sortTree(...)方法使用此函数排序
- tree.findItem(searchString); //find item next to current selection
- tree.findItem(searchString,1,1)//find item previous to current selection
- tree.findItem(searchString,0,1)//search from top
- tree.enableTreeLines(false);
- tree.enableMultiLineItems(true);
- im0 - 没有子结点的结点
- im1 - 有子结点的关闭结点
- im2 - 有子结点的打开结点
设置图标大小
有一种方法可以使用脚本或者xml为整棵树或者每个结点设置图标大小: XML设置每个结点的图标大小(可选):
- <item ... imheight="Xpx" imwidth="Xpx"></item>
脚本语法:
- tree.setIconSize(w,h);//set global icon size
- tree.setIconSize(w,h,itemId)//set icon size for particular item
- <script src="../codebase/ext/dhtmlxtree_kn.js"></script>
- <script>
- tree.enableKeyboardNavigation(true);
- </script>
- 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" 是可用的动作,数字是按键代码
- <script>
- tree.enableDistributedParsing(mode,count,timeout);
- </script>
- mode - 必要参数- true/false - 开启/关闭分布解析
- count - 可选参数- 分配结点的数量
- timeout - 可选参数- 两部分结点之间延迟的毫秒数,这个功能完全和智能XML解析兼容
- function myErrorHandler(type, desc, erData){
- alert(erData[0].status)
- }
- dhtmlxError.catchError("ALL",myErrorHandler);
- "All"
- "LoadXML"
处理函数参数:
- type - 字符串(如上)
- desc - 错误描述(硬编码)
- erData - 错误相关对象数组(如下).
Type | Object(s) |
LoadXML | [0] - response object |
Cold Fusion 标签
- <cf_dhtmlXTree
- >
- ...configuration xml...
- </cf_dhtmlXTree>
- name - [optional] name of the tree js object to use in javascript, if skiped, then name autogenerated
- width - [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 tree
- JSPath - [optional] absolute or relative path to directory which contains tree js files, "js" directory by default
- CSSPath - [optional] absolute or relative path to directory which contains tree css files, "css" directory by default
- iconspath - [optional] absolute or relative path to directory which contains tree icon files, "img" directory by default
- xmldoc - [mandatory for xml loading] url of the xml file used to load levels dynamically
- checkboxes - [optional] show checkboxes (none, twoState, threeState)
- dragndrop - [optional] activate drag-&-drop (true,false)
- style - [optional] style for the tree box
- onSelect - [optional] javascript function to call on node selection
- oncheck - [optional] javascript function to call on node (un)checking
- onDrop - [optional] javascript function to call on node drop
- im1 - [optional] default image used for child nodes
- im2 - [optional] default image used for opened branches
- im3 - [optional] default image used for closed branches For description of optional configuration xml - see chapter "Loading data with XML"
Minimal possible tag syntax with on-page xml:
- <cf_dhtmlXTree>
- <item text="Top node" id="t1" >
- <item text="Child node 1" id="c1" ></item>
- <item text="Child node 2" id="c2" ></item>
- </item>
- </cf_dhtmlXTree>
Minimal possible tag syntax with server-side xml:
- <cf_dhtmlXTree xmldoc="tree.xml">
- </cf_dhtmlXTree>
With images specified:
- <cf_dhtmlXTree
- im1="book.gif"
- im2="books_open.gif"
- im3="books_close.gif">
- <item text="Mystery " id="mystery" open="yes" >
- <item text="Lawrence Block" id="lb" >
- <item text="All the Flowers Are Dying" id="lb_1" />
- <item text="The Burglar on the Prowl" id="lb_2" />
- <item text="The Plot Thickens" id="lb_3" />
- <item text="Grifters Game" id="lb_4" />
- <item text="The Burglar Who Thought He Was Bogart" id="lb_5" />
- </item>
- <item text="Robert Crais" id="rc" >
- <item text="The Forgotten Man" id="rc_1" />
- <item text="Stalking the Angel" id="rc_2" />
- <item text="Free Fall" id="rc_3" />
- <item text="Sunset Express" id="rc_4" />
- <item text="Hostage" id="rc_5" />
- </item>
- <item text="Ian Rankin" id="ir" ></item>
- <item text="James Patterson" id="jp" ></item>
- <item text="Nancy Atherton" id="na" ></item>
- </item>
- </cf_dhtmlXTree>
With Events Handlers,Checkboxes and Drag-n-drop:
- <cf_dhtmlXTree
- dragndrop="true"
- checkboxes="twoState"
- onSelect="onClick"
- onCheck="onCheck"
- onDrop="onDrag">
- <item text="Mystery " id="mystery" open="yes" >
- <item text="Lawrence Block" id="lb" >
- <item text="All the Flowers Are Dying" id="lb_1" />
- <item text="The Burglar on the Prowl" id="lb_2" />
- <item text="The Plot Thickens" id="lb_3" />
- <item text="Grifters Game" id="lb_4" />
- <item text="The Burglar Who Thought He Was Bogart" id="lb_5" />
- </item>
- <item text="Robert Crais" id="rc" >
- <item text="The Forgotten Man" id="rc_1" />
- <item text="Stalking the Angel" id="rc_2" />
- <item text="Free Fall" id="rc_3" />
- <item text="Sunset Express" id="rc_4" />
- <item text="Hostage" id="rc_5" />
- </item>
- <item text="Ian Rankin" id="ir" ></item>
- <item text="James Patterson" id="jp" ></item>
- <item text="Nancy Atherton" id="na" ></item>
- </item>
- </cf_dhtmlXTree>
可编辑结点
- <script src="../codebase/ext/dhtmlxtree_ed.js"></script>
- <script>
- tree.enableItemEditor(mode);
- </script>
- mode - 必要参数- true/false - 开启/关闭可编辑结点
- Event: 使用事件处理可以处理可编辑结点的不同阶段的事件,可以使用attachEvent("onEdit",handlerFunc)来设置. 在编辑过程中有4个不同的阶段:开始编辑前(可取消),编辑开始后,编辑结束前(可取消),编辑结束后 处理方法的4个参数如下:
- state - 0 开始编辑前, 1 编辑开始后, 2 编辑结束前, 3 编辑结束后
- id - 可编辑结点的id
- tree - 树对象
- value - 只有2阶段可以使用,编辑的值
同步与服务器更新
- 更新/插入结点,使用黑体字,删除结点-使用一条横线穿过
- 可以定义数据处理模式(自动/手动).更新/删除结点的数据发送到指定的服务器URL(我们叫它服务器处理器).服务器处理器应该可以返回普通的xml和自定的格式化格式(如下),让树知道服务器是否成功进行处理,所有存储后的过程都会被自动处理
- 使用以下步骤开启此功能:
- 页面中包含dhtmlxdataprocessor.js
- 为树创建数据处理(dataProcessor)对象
- <script src="../codebase/dhtmlxdataprocessor.js"></script>
- <script>
- ...
- tree.init();
- myDataProcessor = new dataProcessor(serverProcessorURL);
- myDataProcessor.init(treeObj);
- </script>
dataProcessor构造器参数如下:
- serverProcessorURL - 必要参数- 处理接收数据文件的Url地址.如果使用服务器端运行.那么就是"dhtmlxDataProcessor/server_code/PHP/update.php?ctrl=tree"
- myDataProcessor.init方法的参数是:
- treeObj - 必要参数- 分配数据处理器(dataProcessor )的树对象
- 如果不需要使用built-in服务器处理器(serverProcessor)而是使用自己的文件处理数据,需要知道以下几点:
- 所有数据从Get域中获取
- - tr_id - 结点ID - tr_order - 同层结点顺序 - tr_pid - 父结点 - tr_text -结点文字(label) - 用户数据块和名字一起传来 - !nativeeditor_status - 如果存在并且值是"inserted"则为插入操作,值为"deleted"为删除操作,不存在或者值为"updated"是更新操作
- 服务器处理器(serverProcessor )应该返回以下格式的XML数据:
- <data>
- <action type='insert/delete/update' sid='incomming_node_ID' tid='outgoing_node_ID'/>
- </data>
只有对于插入结点来说incomming_node_ID和outgoing_node_ID 是两个不同的值.其他操作这两个值时一样的.对于统一服务器端运行时(PHP5/mySQLk可用)使用以下步骤:
- yourTree.loadXML(url) 使用 "dhtmlxDataProcessor/server_code/PHP/get.php?ctrl=tree" 为参数
- new dataProcessor(url) 使用"dhtmlxDataProcessor/server_code/PHP/update.php?ctrl=tree" 为参数
- 在dhtmlxDataProcessor/server_code/PHP/db.php 中配置连接
- 在dhtmlxDataProcessor/server_code/PHP/tree_data.xml 中指定表的相应列值
从HTML初始化
- 在页面中包含 dhtmlxtree_start.js
- 把DIV元素的class属性设置为dhtmlxTree
使用脚本方法转换
- 在页面中包含 dhtmlxtree_start.js
- 调用dhtmlXTreeFromHTML函数,把DIV元素的id当作第一个参数传进去
- var myTree = dhtmlXTreeFromHTML('listBox');
使用html List初始化
- <div
- class="dhtmlxTree"
- id="treeboxbox_tree"
- setImagePath="../codebase/imgs/"
- >
- <ul>
- <li>Root</li>
- <ul>
- <li>Child1
- <ul>
- <li>Child 1-1</li>
- </ul>
- </li>
- <li>Child2</li>
- <li>Bold Italic </li>
- </ul>
- </li>
- </ul>
- </div>
使用内联XML初始化
关于dhtmlxTree XML结构的详细内容清参照 Loading data with XML
- <div id="treeboxbox_tree2" setImagePath="../codebase/imgs/" class="dhtmlxTree" >
- <xmp>
- <item text="Root" open="1" id="11">
- <item text="Child1" select="1" open="1" id="12">
- <item text="Child1-1" id="13"/>
- </item>
- <item text="Child2" id="14"/>
- <item id="15" text="Text"/>
- </item>
- < /xmp>
- </div>
Version/Edition: v1.4/Professional/Standard Required js file:dhtmlxtree_start.js
动态显示(Smart Rendering)
如果树的每层都有很大数量的结点(500或者更多),可以尝试使用动态(Smart Rendering)显示来增加性能.数据结构不需要做任何变化-只需要使用enableSmartRendering打开此功能.注意:此方法和分布解析和三态树不兼容. Version/Edition: v1.5/Professional Required js file:dhtmlxtree_srnd.js
- tree.loadJSONObject(JSON_OBJECT);//for loading from script object
- tree.loadJSON(FILE);//for loading from file
- {id:0,
- item:[
- {id:1,text:"first"},
- {id:2, text:"middle",
- item:[
- {id:"21", text:"child"}
- ]},
- {id:3,text:"last"}
- ]
- tree.loadCSV(FILE);//for loading from file
- tree.loadCSVString(CSVSTRING);//for loading from string
- 1,0,node 1
- 2,1,node 1.1
- 3,2,node 1.1.1
- 4,0,node 2
- tree.loadJSArrayFile(FILE);//for loading from file
- tree.loadJSArray(ARRAY);//for loading from array object
- var treeArray = new Array(
- ["1","0","node 1"],
- ["2","1","node 1.1"],
- ["3","2","node 1.1.1"],
- ["4","0","node 2"]
- )
转自:http://blog.csdn.net/Colin_Bin/article/details/3166205
DHTMLX Tree中文开发指导的更多相关文章
- Eclipse rap 富客户端开发总结(4):如何搭建 rap 中文开发环境
Rap中文开发环境搭建大约分为2个部分 1. rap国际化,详细参加文章(rap开发经验总结(5)-rap国际化之路) 2.rap自带的JFace ,Dialog 等国际化 1.中文包下载地址: h ...
- Lakeshore 中文开发界面,示例项目,飞机大战 等 Lakeshore Chinese development interface, sample project, aircraft war, etc
Lakeshore 中文开发界面,示例项目,飞机大战 等 Lakeshore Chinese development interface, sample project, aircraft war, ...
- 乘风破浪,Windows11设计和开发指导,全新图标字体和云母材质
Windows11全新的布局设计 Windows 11全新的布局设计已设计为支持现代应用体验.渐进的圆角.嵌套元素和一致的排水沟相结合,营造出柔和.平静.平易近人的效果,强调目的的统一和易用性. ht ...
- QtQuick桌面应用程序开发指导 3)达到UI而功能_B 4)动态管理Note物_A
3.2 把Page Item和Marker Item绑定 之前我们实现了PagePanel组件, 使用了三个state来切换Page组件的opacity属性; 这一步我们会使用Marker和Marke ...
- 免费下载获取Odoo中文开发 指南 手册
引言 Odoo是一个强大的商业应用开源平台.在此基础上,构建了一套紧密集成的应用程序,涵盖了从CRM到销售到股票和会计的所有业务领域.Odoo有一个动态和不断增长的社区,不断增加功能.连接器和其他商业 ...
- mpdf中文开发使用文档附demo实例
官网URL:http://www.mpdf1.com/mpdf/index.php github:https://github.com/mpdf/mpdf 官方开发手册,英文的:http://www. ...
- 谷歌Web中文开发手冊:3响应式
https://developers.google.com/web/fundamentals/getting-started/your-first-multi-screen-site/responsi ...
- QtQuick桌面应用开发指导 1)关于教程 2)原型和设计 3)实现UI和功能_A
Release1.0 http://qt-project.org/wiki/developer-guides Qt Quick Application Developer Guide for Desk ...
- tree 中文(转)
原文:http://www.dutor.net/index.php/2009/05/tree-cn-code/ 简介: tree命令可以以目录树的形式显示指定(默认显示这个文件系统)目录的所有文件夹和 ...
随机推荐
- maven更新项目版本
mvn versions:set -DnewVersion=1.0.1-SNAPSHOT // 此操作会生成pom备份文件,推荐使用 mvn versions:set -DnewVersion=1.1 ...
- Entity Framework 6.0 常见异常及解决办法
Ø 简介 本文主要记录 EF(Entity Framework) 在平时的开发中可能遇到的异常,以及应该如何去解决. 1. System.InvalidOperationException 1) ...
- 为数据库重新生成log文件
1.新建一个同名的数据库 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启sql server 5.此时打开企业管理器时会出现置疑,先不 ...
- Docker 更改默认存储目录 - 十一
Cemtos 7 Docker 默认目录是 /var/lib/docker docker info 查看 docker 配置信息 更改 docker 默认目录 : 编辑 启动文件: 编辑 /usr/ ...
- mybatis配置文件详解
这是我看到的博文中最全的一篇了 参见:https://www.cnblogs.com/black-spike/p/7765732.html
- moment.js 时间戳转换
1. 一段时间以0点为标准 : 2018-03-15 00:00:00- 2018-03-21 00:00:00 let startTime = moment('2018-03-15').format ...
- 浅谈linux线程切换问题
http://www.jb51.net/article/102059.htm 处理器总处于以下状态中的一种: 1.内核态,运行于进程上下文,内核代表进程运行于内核空间 2.内核态,运行于中断上下文,内 ...
- Java基础_0309:this关键字
this简介 在Java中this可以完成三件事情:表示本类属性.表示本类方法.当前对象(只是先介绍概念) 调用本类属性 在一个类中定义的方法中可以直接访问类中的属性,但是很多时候有可能会出现方法参数 ...
- MySQL - COUNT关键字
基础数据信息 SELECT COUNT(*) AS '用户名的个数' FROM t_user SELECT COUNT(DISTINCT username) AS '用户名不重复的个数' FROM t ...
- 利用jTessBoxEditor工具进行Tesseract-OCR样本训练
jTessBoxEditor依赖java虚拟机 , 所以要先安装 java. jTessBoxEditor下载地址: https://sourceforge.net/projects/vietocr/ ...