jQuery EasyUI 在datagrid上使用combotree 进行多选

datagrid本身有编辑功能,根据官方说明,在需要编辑的列上,加上editor 属性即可。具体的类型有以下几种: 
text,textarea,checkbox,numberbox,validatebox,datebox,combobox,combotree.

最近想利用combotree实现一个可以多选的树,途中遇到一些问题,放到这里分享一下:

1. 基本写法: 
editor="{type:‘combotree‘,options:{url:‘datagrid_data.json‘,multiple:true}}" 
这里的type指的是编辑器类型,为了实现多选树,我们使用combotree。 options是 combotree的相关选项,注意:由于它扩展自combo和tree ,因此其选项可以从这三种控件中选择。 
url指的是数据加载的来源,这里我们就用demo里的datagrid_data.json文件。multiple是实现多选的关键,之前我一直在tree的选项里面找,比如checkbox=true,这个实现tree的多选没有问题,但是在combotree上不起作用,后来找到了combo的选项,试了一下这个multiple,终于解决了问题。

2. 保存数据: 
上面写好之后,就可以在datagrid上实现多选树了,但是保存之后你会发现,虽然选中的数据用逗号分隔开了,但是只有第一条数据被保存了。editor使用combotree的源码如下(在jquery.easyui.min.js):

Java代码  

  1. combotree: {
  2. init: function(container, options){
  3. var editor = jQuery(‘<input type="text">‘).appendTo(container);
  4. editor.combotree(options);
  5. return editor;
  6. },
  7. destroy: function(target){
  8. jQuery(target).combotree(‘destroy‘);
  9. },
  10. getValue: function(target){
  11. return jQuery(target).combotree(‘getValue‘);
  12. },
  13. setValue: function(target, value){
  14. jQuery(target).combotree(‘setValue‘, value);
  15. },
  16. resize: function(target, width){
  17. jQuery(target).combotree(‘resize‘, width);
  18. }
  19. }

注意看,getValue 和 setValue 方法,他们调用了combotree(‘getValue‘);和combotree(‘setValue‘, value);通过查看API(combo的Methods)可以发现,getValue和setValue是用来获取和设置单值的,如果要设置和获取多个值,需要getValues,setValues 
因此重写一下combotree的扩展:

Java代码  

  1. jQuery.extend(jQuery.fn.datagrid.defaults.editors, {
  2. combotree: {
  3. init: function(container, options){
  4. var editor = jQuery(‘<input type="text">‘).appendTo(container);
  5. editor.combotree(options);
  6. return editor;
  7. },
  8. destroy: function(target){
  9. jQuery(target).combotree(‘destroy‘);
  10. },
  11. getValue: function(target){
  12. var temp = jQuery(target).combotree(‘getValues‘);
  13. //alert(temp);
  14. return temp.join(‘,‘);
  15. },
  16. setValue: function(target, value){
  17. var temp = value.split(‘,‘);
  18. //alert(temp);
  19. jQuery(target).combotree(‘setValues‘, temp);
  20. },
  21. resize: function(target, width){
  22. jQuery(target).combotree(‘resize‘, width);
  23. }
  24. }
  25. });

也就是说,从combotree获取到的值是以逗号分隔(分隔符可以改,默认是逗号)的字符串,之前的setValue方法只取第一个元素,如果转换成数组,就可以作为参数传递给setValues方法,这样datagrid就全部接收了

OK 经过以上两步,datagrid上直接操作多选树就实现了,当然我们这里只用到了一些就简单的options,如果需要更多的功能,可以参考官方API: 
http://www.jeasyui.com/documentation/index.php#

时间: 2025-01-11 23:46:10

jQuery EasyUI 在datagrid上使用combotree 进行多选的相关文章

JQuery EasyUI的datagrid的使用方式总结

JQuery EasyUI的datagrid的使用方式总结第一步:添加样式和js脚本在前台添加展示数据表格的table元素 例如: <div> <table id="tt" style="width: 700px;" title="标题,可以使用代码进行初始化,也可以使用这种属性的方式" iconcls="icon-edit"> </table> </div> 注:表格的属性可以

jQuery EasyUI之DataGrid使用示例

jQuery EasyUI是一个轻量级的Web前端开发框架,提供了很多的现成组件帮助程序员减轻前端代码开发量,之前有个项目中就用到了其中的DataGrid. jQuery EasyUI框架的官方主页:http://www.jeasyui.com/demo/main/index.php.可以下载完整开发包,里面有示例代码可以参考. 由于我使用的是ASP.NET webform技术,下面我就贴出主要的代码以供参考. 在页面中首先要引用相关的css以及js文件,这样才能使用该组件. css部分:  <

给Jquery easyui 的datagrid 每行增加操作链接

我们都知道Jquery的Easy-UI的datagrid可以添加并且自定义Toolbar,这样我们选择一行然后选择toolbar的相应按钮就可以对这行的数据进行操作.但实际项目里我们可能需要在每行后面加一些操作链接,最常见的就是比如"修改"."删除"."查看"之类.如下图: 凡事都怕但是!Easy-UI的Datagrid没有直接添加link的属性.查看Easy-UI的帮助文档,看到一个formater:格式化函数,可以对某一行进行格式化,然后通过

jQuery easyUI 使用 datagrid 表格

获取后台数据依旧是使用一般处理程序(ashx) ,分页上添加一个函数(pagerFilter(data)) 前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="dataGrid.aspx.cs" Inherits="Web.Management.dataGrid" %> <!DOCTYPE html> <html xmln

JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式(转)

需求如下 现有数据列三列 Name,Age,CreateDate 数据 张三,18,2000-12-09 :12:34:56 李四,28,2000-12-09 :12:34:56 王麻子,38,2000-12-09 :12:34:56 Jquery Easyui DataGrid中列设置 { field: 'Name', title: '名称', width: 120 ,align:left},{field: 'Age', title: '年龄', width: 120 ,align:right

jQuery EasyUI的DataGrid 数据行上右键问题

如下图:我想查看单行数据(如ID为20)的右键上获取该行的值,代码: JavaScript code <script type="text/javascript"> $(function(){ $('#test').datagrid({ title:'DataGrid数据列表', iconCls:'icon-grid', fit:true, collapsible:true, closable:true, nowrap: false, animate:true, url:

JQuery EasyUI 之 DataGrid

1.动态创建datagrid 在页面上添加一个div或table标签,然后用jquery获取这个标签,并初始化一个datagrid.代码如下: (1)页面上添加div标签 <div id="dataGrid"></div> (2)用js动态初始化: $(function () { $('#dataGrid').datagrid({ height: 340, url: '<%=path%>/AdminCenter/SysFunction/GetData

jQuery easyUI的datagrid,如何在翻页以后仍能记录被选中的行

1.先给出问题解决后的代码 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%> 3 <% 4 String path = request.getContextP

jquery easyui的datagrid在初始化的时候会请求两次URL?

html代码中利用class声明了datagrid,导致easyUI解析class代码的时候先解析class声明中的datagrid,这样组件就请求了一次url:然后又调用js初始化代码请求一次url.这样导致了重复加载,解决的方法就是只用一种初始化方法来声明easyUI组件以避免重复的提交请求,即删除html中的class声明(class="easyui-datagrid") 即:<table id="DataGrid" class="easyui