DHTMLX基本用法

本文介绍了如何使用DHTMLX进行网页布局,包括toolbar、menu、grid和form的构建。从下载基本库开始,详细讲解了布局创建、菜单与工具栏的设置、数据网格的配置以及与数据库的同步。还涵盖了过滤器、表单绑定、数据处理器的使用,以及如何在grid中添加和删除数据记录。

调用基本的dhtmlx.js和dhtmlx.css
1.需要下载dhtmlxsuite基本库

构建网页布局,常用有toolbar/menu/grid/form
1.构建基本的布局
dhtmlxEvent(window,”load”,function()加载网页
dhtmlXLayoutObject对象创建布局对象
2.创建具体的布局样式,调用或者内嵌CSS
3cell对象下的各种方法,设定样式.比如,setText() 设立标题

按钮添加
1.dhtmlx.image_path引用图片
2.创建attachMenu对象
3.menu.setIconsPath表现menu的图标
4.menu.XML表现menu的内容列表
5.menu.loadStruct(“data/menu.xml”);引用对应的menu.xml

toolbar添加
方式类似按钮

grid添加

1.attachGrid()
2.配置gird,直接在html中添加
contactsGrid.setHeader(“Name,Last Name,Email”); //sets the headers of columns
contactsGrid.setColumnIds(“fname,lname,email”); //sets the columns’ ids
contactsGrid.setInitWidths(“250,250,*”); //sets the initial widths of columns
contactsGrid.setColAlign(“left,left,left”); //sets the alignment of columns
contactsGrid.setColTypes(“ro,ro,ro”); //sets the types of columns
contactsGrid.setColSorting(“str,str,str”); //sets the sorting types of columns
3.contactsGrid.init();结束grid的初始化

将grid与数据库同步
1.数据库新建表,字段先建好
2.同步数据库的数据到grid中,需要dhtmlxConnector library,connector文件夹
3.新建contacts.php 连接数据库
4..contactsGrid.load(“data/contacts.php”);连接PHP

过滤器添加,grid查询功能
1.contactsGrid.attachHeader(“#text_filter,#text_filter,#text_filter”);在grid上面添加filter

from添加
1.contactForm = layout.cells(“b”).attachForm();把from添加到相应的cell里面
2.创建from.xml,创建from的列表项
3.loadStruct调用xml

将from链接Bind到grid中
1.contactForm.bind(contactsGrid);

保存来自from的数据,数据处理器dataprocessor
1.初始化dhtmlxDataProcessor,并将它添加到grid中
var dpg = new dataProcessor(“data/contacts.php”); //inits dataProcessor
dpg.init(contactsGrid); //associates the dataProcessor instance with the grid
2.handler处理程序来响应submit按钮的onButtonClick事件,并且把更新的书架发送到数据库服务器

在grid中添加和删除数据记录
1.调研方法onClick()来响应Add按钮的点击事件,在grid中创建新的row
2.调用方法 onAfterUpdate(),选择新建的数据记录,一旦grid完成来自服务器的响应,记录成功的添加到数据库中。选择最新被创建的row,然后focus到from的第一个input中。

dpg.attachEvent("onAfterUpdate", function(sid, action, tid, tag){
    if (action == "inserted"){
        contactsGrid.selectRowById(tid);        //selects the newly-created row                          
        contactForm.setFocusOnFirstActive();//set focus to the 1st form's input                              
    }
});

3.调用onClick()方法,系统调用重写,相应delete按钮

PS
1.注意onClick与onButtonClick方法的异同之处

dhtmlXTree进行一个小的扩展 需求1: 动态生成树形菜单,每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL。(框架页说明:左边是树形菜单;右边是显示页面相应信息的页面) 分析: dhtmlXTree提供了很好的添加,删除节点的方法,故选择dhtmlXTree。 但是dhtmlXTree不能满足"每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL"这点需求,因次想到了对dhtmlXTree进行一个小的扩展,即在其节点对象原有属性的基础上,再添加两个扩展属性。具体操作如下: 1、找到定义节点对象的那个函数(或方法) function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode) 修改为 function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode,url,target) 并在方法体中添加赋值语句:this.itemURL=url;this.itemTarget=target; 2、然后修改所有与dhtmlXTreeItemObject有关(直接或者间接相关)的方法: _attachChildNode,insertNewItem,insertNewChild,insertNewNext,_recreateBranch,_parseXMLTree 注:_parseXMLTree方法是与loadXML,loadXMLString相关的。 在这些方法中生成节点的语句中添加相应的参数和语句,以支持新添加的属性itemURL,itemTarget。 需求2: 为dhtmlXTree树上的每一个节点添加右键菜单。附:在树上的节点上点右键时才会生成菜单,空白区域单击时不会生成菜单。 分析: 1、用 dhtmlXTree + dhtmlxmenu 实现。 2、 用dhtmlxmenu生成菜单的部分代码: var menu = new dhtmlXMenuObject(); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAsContextMenu(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone("treeboxbox_tree"); menu.addContextZone方法是为了把菜单添加到指定区域。 3、dhtmlXTreeObject.prototype._createItem方法是构造树形菜单上元素的具体实现方法。看这个方法的具体操作,可以发现它为每一个节点构建了一个table,节点的内容(即名字)放置在一个span中。 4、考虑到dhtmlxmenu实在指定的区域构建菜单,所以可以为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 难点和解决方案: 1、怎样获得dhtmlXTree树上的每一个节点对象所对应的区域?(dhtmlXTreeObject.prototype._createItem方法没有为这个节点的span设置id) 解决方法: 在dhtmlXTreeObject.prototype._createItem方法中添加一个为span设置id的语句: 即: 在itemObject.span=document.createElement('span'); itemObject.span.className="standartTreeRow"; 后,新添加一句 itemObject.span.id="treeNode_"+itemObject.id;//为这个span新增一个Id属性 2、为dhtmlXTree树上的每一个节点添加右键事件,在这个右键事件里获得该节点对象所对应的区域,然后在这个区域内构建Menu菜单。 解决方法: a、为dhtmlXTree树上的每一个节点添加右键事件: tree.setOnRightClickHandler(treeOnRegihtClick);//右键事件 b、构建Menu菜单: var menu = new dhtmlXMenuObject(); function treeOnRegihtClick(id){ alert("右键 "+" span.id:"+tree.getItem(id).span.id); menu.setImagePath("imgs/"); menu.setIconsPath("images/"); menu.renderAsContextMenu(); menu.loadXML("dhtmlxmenu.xml?e="+new Date().getTime()); menu.addContextZone(tree.getItem(id).span.id);alert("width:"+tree.getItem(id).span.clientWidth); //var X=tree.getItem(id).span.getBoundingClientRect().left; //var Y=tree.getItem(id).span.getBoundingClientRect().top; var X=document.getElementById('mouseXPosition').value;//获得鼠标的横坐标位置 var Y=document.getElementById('mouseYPosition').value;//获得鼠标的纵坐标位置 menu.showContextMenu(X,Y);//调用showContextMenu方法显示菜单 说明:如果这儿不加上这条语句的话,第一次点击右键时只能生成菜单,但是显示不出菜单,下次点击右键Menu菜单才能弹出。 //menu._showContextMenu(X,Y,tree.getItem(id).span.id); } c、用 javascript 获取当页面上鼠标(光标)位置 <script type="text/javascript"> // 说明:获取鼠标位置 function mousePosition(ev){ if(ev.pageX || ev.pageY){ return {x:ev.pageX, y:ev.pageY}; } return { x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, y:ev.clientY + document.body.scrollTop - document.body.clientTop }; } document.onmousemove = mouseMove; function mouseMove(ev){ ev = ev || window.event; var mousePos = mousePosition(ev); document.getElementById('mouseXPosition').value = mousePos.x; document.getElementById('mouseYPosition').value = mousePos.y; } </script> 页面上放置两个隐藏域存放鼠标的位置:<input type="hidden" id=mouseXPosition><input type="hidden" id=mouseYPosition>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值