combotree(组合树)的使用

一、前言:

  组合树(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(0);

          foreach(DataRow dr in dt.Rows)
          {
              if(dr!=dt.Rows[dt.Rows.Count-1])//如果此时不是最后一行数据
              {
                  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 != 0)
          {
              ProjectJson += "[";

              foreach(DataRow d in dt.Rows)
              {
                  if(d!=dt.Rows[dt.Rows.Count-1])
                  {
                      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);

原文地址:https://www.cnblogs.com/zhaoyl9/p/11278054.html

时间: 2024-10-13 15:02:56

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

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

EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等.当提交表单时,调用 'validate' 方法来检查表单是否有效. 用法 创建一个简单的 HTML 表单.构建表单并给 id.action.method 赋值. <form id="ff" method="post"> <div> <lab

EasyUI组合树插件

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

JQuery Easy Ui (Tree树)详解

在这里沉重悼念我辛辛苦苦写了4个小时的文章,因为我的失误,没保存,而夭折啦..... 我的痛苦谁能懂? 哎~~~~  吃一见长一智吧! 么的办法啊! 但是,但是!我狠了狠心,咬了咬牙!我决定,再写一遍!!! 谁知道哭的表情怎么写! 我已经无法用言语表达我此时此刻的沉重心情了! (以下内容,身为菜鸟的我是用颤抖的双手敲出来的,忘同志们珍惜!!!!) 记得4个小时之前,我写过一个随笔,它的内容是这样的: 每次写博客,都喜欢在前面和大家分享一些东西,今天要分享的是一个小故事: 一个世界著名的大酒店正在

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

JQuery Easy Ui (Tree树)详解(转) 第一讲:JQuery Easy Ui到底是什么呢? 首先咱们知道JQuery是对Java Script的封装,是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等.. JQuery ui是在jQuery的基础上,利用jQuery的扩展性,设计的插件. 那么JQuery Easy Ui到底是什么呢? 我的理解就是比JQuery ui更强大,同样都是实现绚丽的多功能效果! jQuery Easy UI的目的就是帮助Web开发者更轻松的打

easyui介绍

jQueryEasyUI 编辑 jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签. 外文名 jQueryEasyUI 定    义 基于jQuery的UI插件集合体 功    能 打造出功能丰富并且美观的UI界面 应用对象 web开发者 目录 1 特点 2 插件 3

jQuery EasyUI 1.2.4 API 中文文档(完整)目录

Welcome 欢迎 由于项目需求,要使用富客户端,选择了EasyUI,之前并没有接触过,上网搜索一番,没有找到完整的中文文档,项目组又没有英语达人,无奈之下,我硬着头皮,把官方提供的英文文档啃了,一边啃顺便用中文记录下来. 其实几个月前就啃完了,现在的项目组一直在参考使用.我深感查字典揣摩英文原意的痛苦,早就想快点都通过博客共享出去,免去如我一样英语破(poor)人的痛苦,可是上班忙工作,下班忙家务,所以断断续续的,好在终于要发完了,也算了却一桩心事. 为了方便大家检索使用,制作此目录置顶.

EasyUI——combotree

扩展自 $.fn.combo.defaults 和 $.fn.tree.defaults.通过 $.fn.combotree.defaults 重写默认的 defaults. 组合树(combotree)把选择控件和下拉树结合起来.它与组合框(combobox)相似,不同的是把列表替换成树组件. 组合树(combotree)支持带有用于多选的树状态复选框的树. 从标记创建组合树(combotree). 1 <select id="cc" class="easyui-co

Jquery EasyUI Combotree根据选中的值展开所有父节点

Jquery EasyUI Combotree根据选中的值展开所有父节点  Jquery EasyUI Combotree 展开父节点, Jquery EasyUI Combotree根据子节点选中的值,展开前面所有父节点, Jquery EasyUI Combotree获取选中的值 ================================ ?Copyright 蕃薯耀 2018年5月7日 http://www.cnblogs.com/fanshuyao/ 一.Combotree获取父节

结构型模式-组合模式

1.定义 将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 2.介绍 组合模式属于结构型模式. 组合模式有时叫做部分-整体模式,主要是描述部分与整体的关系. 组合模式实际上就是个树形结构,一棵树的节点如果没有分支,就是叶子节点;如果存在分支,则是树枝节点. 我们平时遇到的最典型的组合结构就是文件和文件夹了,具体的文件就是叶子节点,而文件夹下还可以存在文件和文件夹,所以文件夹一般是树枝节点. 3.UML类图 角色说明: Component