轻松学习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 解疑
Nov 11 Javascript
Javascript倒计时代码
Aug 12 Javascript
初识Node.js
Sep 03 Javascript
jquery实现的代替传统checkbox样式插件
Jun 19 Javascript
javascript实现在网页中运行本地程序的方法
Feb 03 Javascript
jQuery简单实现仿京东分类导航层效果
Jun 07 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
Mar 07 Javascript
js实现手机发送验证码功能
Mar 13 Javascript
vue.js实现价格格式化的方法
May 23 Javascript
angular2+node.js express打包部署的实战
Jul 27 Javascript
Vue from-validate 表单验证的示例代码
Sep 26 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
Jan 16 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代码把全角数字转为半角数字
2007/12/10 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
php表单处理操作
2017/11/16 PHP
js资料toString 方法
2007/03/13 Javascript
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
2017/08/03 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
在类Unix系统上开始Python3编程入门
2015/08/20 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
python入门教程 python入门神图一张
2018/03/05 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
Python实现石头剪刀布游戏
2021/01/20 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
创业计划书怎样才能打动风投
2014/01/01 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
先进工作者推荐材料
2014/12/23 职场文书
开会通知短信大全
2015/04/20 职场文书
乱世佳人观后感
2015/06/08 职场文书