轻松学习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学习笔记-详解in运算符
Sep 13 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
简单的代码实现jquery定时器
Nov 17 Javascript
深入理解React中es6创建组件this的方法
Aug 29 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
兼容浏览器的js事件绑定函数(详解)
May 09 Javascript
js获取css的各种样式并且设置他们的方法
Aug 22 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
Dec 22 Javascript
vue draggable resizable gorkys与v-chart使用与总结
Sep 05 Javascript
vue 清空input标签 中file的值操作
Jul 21 Javascript
深入了解Vue.js 混入(mixins)
Jul 23 Javascript
Node.js fs模块原理及常见用途
Oct 22 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
桌面中心(二)数据库写入
2006/10/09 PHP
浅谈PHP语法(1)
2006/10/09 PHP
开发大型 PHP 项目的方法
2007/01/02 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
2016/05/26 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
jquery密码强度校验
2015/12/02 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
详解Scrapy Redis入门实战
2020/11/18 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
希特勒的演讲稿
2014/05/23 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
2015年度企业工作总结
2015/05/21 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Nginx反向代理配置的全过程记录
2021/06/22 Servers
Redis Cluster集群动态扩容的实现
2021/07/15 Redis
浅谈如何保证Mysql主从一致
2022/03/13 MySQL