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

前端技术 2023/09/01 JavaScript

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

创建树形网格(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)添加分页。

 

创建树形网格(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)。

 

创建树形网格(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)》

本文地址:https://www.stayed.cn/item/2396

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。