轻松学习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 相关文章推荐
通过JS 获取Mouse Position(鼠标坐标)的代码
Sep 21 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
Sep 26 Javascript
replace()方法查找字符使用示例
Oct 28 Javascript
js call方法详细介绍(js 的继承)
Nov 18 Javascript
Vue方法与事件处理器详解
Dec 01 Javascript
vue绑定设置属性的多种方式(5)
Aug 16 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
Aug 31 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
Nov 07 jQuery
微信小程序封装多张图片上传api代码实例
Dec 30 Javascript
JavaScript实现Excel表格效果
Feb 07 Javascript
js数组的基本使用总结
Jan 18 Javascript
基于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递归调用的小技巧讲解
2013/02/19 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
php数组合并的二种方法
2014/03/21 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
浅析jQuery的链式调用之each函数
2010/12/03 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
详解Python map函数及Python map()函数的用法
2017/11/16 Python
python retrying模块的使用方法详解
2019/09/25 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
会计岗位职责范本
2014/03/07 职场文书
安全生产演讲稿
2014/05/09 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
客房领班岗位职责
2015/02/11 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
社区党建工作总结2015
2015/05/13 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python
Nginx配置使用详解
2022/07/07 Servers