一、前言:

  组合树(combotree)把选择控件和下拉树结合起来。它与组合框(combobox)相似,不同的是把列表替换成树组件。组合树(combotree)支持带有用于多选的树状态复选框的树。

二、使用实例

1、创建方式

  easyui 中的控件一般有两种创建方式:通过标签的方式以及js编程的方式。

1.1 标签的方式创建:

<select id="cc" class="easyui-combotree" style="width:200px;"
data-options="url:'get_data.php',required:true">
</select>

1.2 使用 javascript 创建组合树(combotree)

1.2.1 本地数据源的加载

通过继承自tree的"data"属性来实现:

<input id="ProjectTree"  style="width: 300px;" />
$("#ProjectTree").combotree({
data: [{
text: 'Item1',
state: 'closed',
children: [{
text: 'Item11'
}, {
text: 'Item12'
}]
}, {
text: 'Item2'
}]
});

效果图:

通过方法“loadData”实现:

<input id="ProjectTree" class="easyui-combotree"  style="width: 300px;" />
$("#ProjectTree").combotree("loaddata", [{
text: 'Item1',
state: 'closed',
children: [{
text: 'Item11'
}, {
text: 'Item12'
}]
}, {
text: 'Item2'
}]);

1.2.2 异步加载数据:

在介绍异步加载数据之前,先讲解一下数据源的格式。其格式为json,每个节点都具备一下属性:

  • id:节点ID,对加载远程数据很重要。
  • text:显示节点文本。
  • state:节点状态,'open' 或 'closed',默认:'open'。如果为'closed'的时候,将不自动展开该节点。
  • checked:表示该节点是否被选中。
  • attributes: 被添加到节点的自定义属性。
  • children: 一个节点数组声明了若干节点。

数据源格式举例:

[{
"id":1,
"text":"Folder1",
"iconCls":"icon-save",
"children":[{
"text":"File1",
"checked":true
},{
"text":"Books",
"state":"open",
"attributes":{
"url":"/demo/book/abc",
"price":100
},
"children":[{
"text":"PhotoShop",
"checked":true
},{
"id": 8,
"text":"Sub Bookds",
"state":"closed"
}]
}]
},{
"text":"Languages",
"state":"closed",
"children":[{
"text":"Java"
},{
"text":"C#"
}]
}]

异步加载数据举例:

前端js代码:

//构造项目树
$("#ProjectTree").combotree({
url: "Ajax.ashx",
valueField: "id",
textField: "text",
lines: true,
queryParams: {
ParamType: "Init",
Action: "GetProjectTree",
M: Math.random()
},
onBeforeSelect: function (node) {
// debugger;
if (!$(this).tree('isLeaf', node.target)) {
$(this).combo("showPanel");
return false;
} } });

1.2.2.1 在实现过程中遇到的问题以及解决方法

1、json的格式

http://baike.baidu.com/link?url=-NLPp39k0VtBHuPU0yER_K06ek_yTVzzXTzC05GwBuiAtIb-9HE7Ufgn85MbrjBXaeKUtxl_MnOPmumpv8n34q

2、C#中引号的嵌套

通过转义字符来实现:\"

3、如何生成combotree的数据源

  通过递归的算法来实现,直接上代码:

/// <summary>
/// 构造项目树
/// </summary>
/// <returns>返回Json格式的字符串</returns>
public string GetProjectTree()
{
string Jsonstring = "[";
DataTable dt = GetPorjectNodeById(); foreach(DataRow dr in dt.Rows)
{
if(dr!=dt.Rows[dt.Rows.Count-])//如果此时不是最后一行数据
{
Jsonstring +='{'+ GetProjJson(dr)+'}'+','; }
else
{
//string a = GetProjJson(dr);
Jsonstring +='{'+ GetProjJson(dr)+'}';
}
} return Jsonstring+="]";
} /// <summary>
/// 获取根节点或某个父节点的子节点
/// </summary>
/// <param name="Parent_id"></param>
/// <returns></returns>
public DataTable GetPorjectNodeById(int Parent_id)
{ SqlParameter[] Sqlpara = new SqlParameter[] {
new SqlParameter("@Parent_id",Parent_id)
}; return db.ExecuteDataTable("P_GetProjectInfr",Sqlpara); } /// <summary>
/// 获取根节点的子节点
/// </summary>
/// <param name="dr"></param>
/// <returns>返回json格式的字符串</returns>
public string GetProjJson(DataRow dr)
{
string ProjectJson = ""; ProjectJson = "\"id\":" + dr["type_sid"]
+ ",\"text\":\"" + dr["Name"]
+ "\",\"children\":"; DataTable dt = GetPorjectNodeById(int.Parse(dr["type_sid"].ToString())); if (dt.Rows.Count != )
{
ProjectJson += "["; foreach(DataRow d in dt.Rows)
{
if(d!=dt.Rows[dt.Rows.Count-])
{
ProjectJson +="{"+GetProjJson(d)+"}"+",";
}
else
{
ProjectJson +="{"+GetProjJson(d)+"}";
} }
ProjectJson += "]"; }
else {
ProjectJson += "null";
} return ProjectJson; }

2. combotree如何实现只允许选择叶子节点

3、下面对相关的属性、方法进行记录说明

3.1 属性

树形下拉框的属性扩展自combo与tree,其重写的属性如下:

属性名 属性值类型 描述 默认值
editable boolean 定义用户是否可以直接输入文本到字段中。 false

3.2 事件

该事件扩展自组合(combo)和树(tree)

3.3 方法

该方法扩展自组合(combo),下面是为组合树(combotree)添加或重写的方法。

名称 参数 描述
options none 返回选项(options)对象。
tree none 返回树(tree)对象。下面的实例演示如何取得选中的树节点。
  1. var t = $('#cc').combotree('tree'); // get the tree object
  2. var n = t.tree('getSelected'); // get selected node
  3. alert(n.text);
loadData data 记住本地的树(tree)数据。
代码实例:
  1. $('#cc').combotree('loadData', [{
  2. id: 1,
  3. text: 'Languages',
  4. children: [{
  5. id: 11,
  6. text: 'Java'
  7. },{
  8. id: 12,
  9. text: 'C++'
  10. }]
  11. }]);
reload url 再一次请求远程的树(tree)数据。传 'url' 参数来重写原始的 URL 值。
clear none 清除组件的值。
setValues values 设置组件值的数组。
代码实例:
  1. $('#cc').combotree('setValues', [1,3,21]);
setValue value 设置组件的值。
代码实例:
  1. $('#cc').combotree('setValue', 6);

combotree(组合树)的使用的更多相关文章

  1. 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树

    EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等. ...

  2. Jquery UI 组合树 - ComboTree 集成Wabacus4.1 代码剖析

    Jquery UI 1.3 (组合树 - ComboTree ) 集成Wabacus4.1 集成Spring 代码剖析 使用时,请下载需要Jquery ui包进行配置 combotree.js 的代码 ...

  3. EasyUI组合树插件

    一.引用CSS和JS <link href="~js/easyui/easyui.css" rel="stylesheet" type="tex ...

  4. HDUOJ-----2838Cow Sorting(组合树状数组)

    Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. easyUI带复选框的组合树

    代码: <input id="depts"><script type="text/javascript">$(document).rea ...

  6. easyUI的combotree的树的懒加载。

    var tree=[{    "id":1,    "text":"My Documents",    "children&quo ...

  7. easyui combotree 异步树 前端写法js

    简要说下使用场景: combotree下拉框第一次加载时,请求一个接口,页面上展示顶层节点们(可以理解为最顶层的节点,比如所有的一级公司): 当点击其中一个节点前面的小三角展开时,再次请求服务器接口( ...

  8. JQuery Easy Ui (Tree树)详解(转)

    第一讲:JQuery Easy Ui到底是什么呢? 首先咱们知道JQuery是对Java Script的封装,是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等.. JQuery ui是在j ...

  9. jQueryEasyUI

    jQueryEasyUI 编辑 jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者 ...

随机推荐

  1. python面试的100题(10)

    18.反转一个整数,例如-123 --> -321 class Solution(object): def reverse(self,x): if -10<x<10: return ...

  2. servlet中的“/”代表当前项目,html中的“/”代表当前服务器

    servlet中重定向或请求转发的路径如果用“/”开头,代表当前项目下的路径,浏览器转发这条路径时会自动加上当前项目的路径前缀,如果这个路径不是以“/”开头,那么代表这个路径和当前所在servlet的 ...

  3. 2019年牛客多校第一场B题Integration 数学

    2019年牛客多校第一场B题 Integration 题意 给出一个公式,求值 思路 明显的化简公式题,公式是分母连乘形式,这个时候要想到拆分,那如何拆分母呢,自然是裂项,此时有很多项裂项,我们不妨从 ...

  4. Unity相机鼠标基本控制

    一.滚轮控制视角缩放 /// <summary> /// 滚轮控制相机视角缩放 /// </summary> public void CameraFOV() { //获取鼠标滚 ...

  5. C++ split分割字符串函数

    将字符串绑定到输入流istringstream,然后使用getline的第三个参数,自定义使用什么符号进行分割就可以了. #include <iostream> #include < ...

  6. net core,redis的安装和试用

    一.window上面安装reids 在github上面下载,地址 安装完成后,进入安装目录打开redis服务, 这里双击Redis服务器即可启动Redis. 二.安装redis可视化工具 命令行操作r ...

  7. 面试题17.打印从1到最大的n位数

    void print_n_number(int n){ if(n<=0){ cout<<"fuckyou"; return; } string s="1 ...

  8. 集合的操作 contains(),containsAll() ,addAll(),removeAll(),

    package seday11; import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;/** ...

  9. FreeRTOS学习笔记1:任务

    任务特性每个任务有自己的环境,不依赖于其他任务与调度器任何时间点只有一个任务运行.由调度器决定上下文环境:(寄存器值.堆栈内容等)调度器保证的就是任务开始执行时的上下文环境与上一次退出时相同所以每个任 ...

  10. 使用git上传项目解决码云文件次数上传限制(原文)

    起因:个人免费版的码云上传文件时限制: 1个小时内只能上传20个文件 解决方法:在码云创建空的项目仓库,使用git客户端下载码云的项目,把需要上传的文件复制到该项目中去,用git提交! 1.配置git ...