轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)


Posted in Javascript onNovember 30, 2015

一、EasyUI树形网格动态加载
动态加载树形网格有助于从服务器上加载部分的行数据,避免加载大型数据的长时间等待。本教程将向您展示如何创建带有动态加载特性的树形网格(TreeGrid)。

轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)

创建树形网格(TreeGrid)

<table title="Products" class="easyui-treegrid" style="width:700px;height:300px"
  url="treegrid3_getdata.php"
  rownumbers="true"
  idField="id" treeField="name">
 <thead>
  <tr>
  <th field="name" width="250">Name</th>
  <th field="quantity" width="100" align="right">Quantity</th>
  <th field="price" width="150" align="right" formatter="formatDollar">Price</th>
  <th field="total" width="150" align="right" formatter="formatDollar">Total</th>
  </tr>
 </thead>
 </table>

服务器端代码
treegrid3_getdata.php

$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
 
include 'conn.php';
$result = array();
$rs = mysql_query("select * from products where parentId=$id");
while($row = mysql_fetch_array($rs)){
 $row['state'] = has_child($row['id']) ? 'closed' : 'open';
 $row['total'] = $row['price']*$row['quantity'];
 array_push($result, $row);
}
 
echo json_encode($result);
 
function has_child($id){
 $rs = mysql_query("select count(*) from products where parentId=$id");
 $row = mysql_fetch_array($rs);
 return $row[0] > 0 ? true : false;
}

二、EasyUI树形网格添加分页
第二部分教大家如何向带有动态加载特性的树形网格(TreeGrid)添加分页。

 轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)

创建树形网格(TreeGrid)

启用树形网格(TreeGrid)的分页特性,必须添加 'pagination:true' 属性,这样页面加载时就会向服务器发送 'page' 和 'rows' 参数。

<table title="Products" class="easyui-treegrid" style="width:700px;height:300px"
  data-options="
  url: 'treegrid4_getdata.php',
  rownumbers: true,
  pagination: true,
  pageSize: 2,
  pageList: [2,10,20],
  idField: 'id',
  treeField: 'name',
  onBeforeLoad: function(row,param){
   if (!row) { // load top level rows
   param.id = 0; // set id=0, indicate to load new page rows
   }
  }
  ">
 <thead>
  <tr>
  <th field="name" width="250">Name</th>
  <th field="quantity" width="100" align="right">Quantity</th>
  <th field="price" width="150" align="right" formatter="formatDollar">Price</th>
  <th field="total" width="150" align="right" formatter="formatDollar">Total</th>
  </tr>
 </thead>
 </table>

服务器端代码

treegrid4_getdata.php

$page = isset($_POST['page']) ? intval($_POST['page']) : 1;
$rows = isset($_POST['rows']) ? intval($_POST['rows']) : 10;
$offset = ($page-1)*$rows;
 
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
 
include 'conn.php';
 
$result = array();
if ($id == 0){
 $rs = mysql_query("select count(*) from products where parentId=0");
 $row = mysql_fetch_row($rs);
 $result["total"] = $row[0];
 
 $rs = mysql_query("select * from products where parentId=0 limit $offset,$rows");
 $items = array();
 while($row = mysql_fetch_array($rs)){
 $row['state'] = has_child($row['id']) ? 'closed' : 'open';
 array_push($items, $row);
 }
 $result["rows"] = $items;
} else {
 $rs = mysql_query("select * from products where parentId=$id");
 while($row = mysql_fetch_array($rs)){
 $row['state'] = has_child($row['id']) ? 'closed' : 'open';
 $row['total'] = $row['price']*$row['quantity'];
 array_push($result, $row);
 }
}
 
echo json_encode($result);
 
function has_child($id){
 $rs = mysql_query("select count(*) from products where parentId=$id");
 $row = mysql_fetch_array($rs);
 return $row[0] > 0 ? true : false;
}

发送到服务器的参数包括:
page:要加载的当前页面。
rows:页面尺寸大小。
id:父行的 id 值,从服务器返回的行将被添加。
当展开一个行节点时,'id' 值是大于 0 的。 当改变页码时,'id' 值应该被设置为 0 来放置加载子行。
三、EasyUI树形网格惰性加载节点
有时我们已经得到充分的分层树形网格(TreeGrid)的数据。 我们还想让树形网格(TreeGrid)按层次惰性加载节点。 首先,只加载顶层节点。 然后点击节点的展开图标来加载它的子节点。 本教程展示如何创建带有惰性加载特性的树形网格(TreeGrid)。

 轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)

创建树形网格(TreeGrid)

<table id="test" title="Folder Browser" class="easyui-treegrid" style="width:700px;height:300px"
  data-options="
  url: 'data/treegrid_data.json',
  method: 'get',
  rownumbers: true,
  idField: 'id',
  treeField: 'name',
  loadFilter: myLoadFilter
  ">
 <thead>
  <tr>
  <th field="name" width="220">Name</th>
  <th field="size" width="100" align="right">Size</th>
  <th field="date" width="150">Modified Date</th>
  </tr>
 </thead>
 </table>

为了放置加载子节点,我们需要为每个节点重命名 'children' 属性。 正如下面的代码所示,'children' 属性重命名为 'children1'。 当展开一个节点时,我们调用 'append' 方法来加载它的子节点数据。
'loadFilter' 代码

function myLoadFilter(data,parentId){
 function setData(){
  var todo = [];
  for(var i=0; i<data.length; i++){
  todo.push(data[i]);
  }
  while(todo.length){
  var node = todo.shift();
  if (node.children){
   node.state = 'closed';
   node.children1 = node.children;
   node.children = undefined;
   todo = todo.concat(node.children1);
  }
  }
 }
 
 setData(data);
 var tg = $(this);
 var opts = tg.treegrid('options');
 opts.onBeforeExpand = function(row){
  if (row.children1){
  tg.treegrid('append',{
   parent: row[opts.idField],
   data: row.children1
  });
  row.children1 = undefined;
  tg.treegrid('expand', row[opts.idField]);
  }
  return row.children1 == undefined;
 };
 return data;
 }

以上就是针对树形网络的相关操作,希望对大家的学习有所帮助,大家可以结合前一篇文章进行学习,会有意想不到的收获。

相关文章阅读: 《轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)》

Javascript 相关文章推荐
javascript RadioButtonList获取选中值
Apr 09 Javascript
jQuery数组处理代码详解(含实例演示)
Feb 03 Javascript
通过js简单实现将一个文本内容转译成加密文本
Oct 22 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
Mar 02 Javascript
原生JavaScript编写canvas版的连连看游戏
May 29 Javascript
AngularJS基础 ng-show 指令简单示例
Aug 03 Javascript
JS正则子匹配实例分析
Dec 22 Javascript
bootstrap PrintThis打印插件使用详解
Feb 20 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
Jun 22 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 #Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
Nov 30 #Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
Nov 30 #Javascript
JS简单模拟触发按钮点击功能的方法
Nov 30 #Javascript
移动手机APP手指滑动切换图片特效附源码下载
Nov 30 #Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
Nov 30 #Javascript
浅析node连接数据库(express+mysql)
Nov 30 #Javascript
You might like
php去除HTML标签实例
2013/11/06 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
python3中sys.argv的实例用法
2020/04/24 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
2013年大学生的自我鉴定
2013/10/24 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
应急处置方案
2014/06/16 职场文书
第28个世界无烟日活动总结
2015/02/10 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
辩护意见书
2015/06/04 职场文书
《法国号》教学反思
2016/02/22 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android