最近为分公司的项目做外援,做起了全栈的活。被公司自研架构磨灭的几乎忘掉了其他技能,正好新项目决定重新搭个架构,与同事们讨论过后,决定Spring+MyBatis+SpringMVC+CXF+LigerUI。除了Spring比较熟悉外,其他的还是新接触,不过现在来看,MyBatis和SpringMVC还真是简单易学。不过我的前端知识很有限,干起活来还真是不顺手,所以决定把LigerUI中遇到的问题和解决方案整理整理。

    闲言少叙(好像不少了☻)...
一、效果
    所选课程列是多选,这里决定用弹出框的效果(popup)
二、准备工作
    为了方便,这里用Jfinal搭了个简单的环境,导入ligerUI的js和css就可以了。
    在JSP用引入下面几个文件,为了方便调试,我这里引用的是ligerui.all.js,生产环境用ligerui.min.js就可以了
三、实战
  1.  <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <linktype="text/css"href="/ligerui/skins/Aqua/css/ligerui-all.css"
    rel="stylesheet">
    <scripttype="text/javascript"src="/js/jquery-1.4.4.min.js"></script>
    <scripttype="text/javascript"src="/ligerui/js/ligerui.all.js"></script>
    <scripttype="text/javascript">
    //测试数据
    var test_data ={
    Rows:[{
    user_num :'A0001',
    user_name :'张三'
    },{
    user_num :'A0002',
    user_name :'李四'
    },{
    user_num :'A0003',
    user_name :'王五'
    }],
    Total:3
    };
    //课程数据
    var courser_data ={
    Rows:[{
    courser_id :'B001',
    courser_name :'语文'
    },{
    courser_id :'B002',
    courser_name :'数学'
    },{
    courser_id :'B003',
    courser_name :'英语'
    },{
    courser_id :'B004',
    courser_name :'音乐'
    },{
    courser_id :'B005',
    courser_name :'体育'
    },{
    courser_id :'B006',
    courser_name :'美术'
    }],
    Total:6
    };
    $(function(){
    initGrid();
    })
    function initGrid(){
    $("#grid_first").ligerGrid({
    columns :[{
    display :'姓名',
    name :'user_name',
    width :120
    },{
    display :'学号',
    name :'user_num',
    width :120
    },{
    display :'所选课程',
    name :'course_id',
    textField :'course_name',
    width :240,
    editor :{
    type :'popup',
    valueField :'courser_id',
    textField :'courser_name',
    grid :{
    columns :[{
    display :'课程名称',
    name :'courser_name'
    }],
    width :360,//指定弹出框宽度
    enabledSort :false,
    data : $.extend({}, courser_data),
    checkbox :true,
    usePager :false,
    rownumbers :false
    }
    }
    }],
    enabledEdit :true,
    usePager :false,
    checkbox :false,
    width :'100%',
    heigth :'99',
    enabledSort :false,
    data : test_data
    });
    }
    </script>
    </head>
    <body>
    <divid="grid_first"></div>
    </body>
    </html>
上面的代码是根据官网的例子写的,但是这样运行是有问题的:1.重新选择时取消选择不生效;2.设置宽度不生效。这是本篇主要介绍的内容。
1.解决重新选择时取消选择不生效的问题:
    当取消选择"数学"时,结果并不会生效。
    调试时会发现,选择的数据居然有7个,当然这里面有重复的,三个是第二次选择的三个项,另外四个则是前一次选择的四个项,所以回写时就覆盖掉了取消选择。
    继续调试跟踪,初始选择时,居然会运行12次,也就是初始化了两遍,原因应该就在这了。
    追踪到调用位置,如果frozen=true时,_fillGridBody()会执行两遍。
    解决:
修改一下代码,在editor中增加frozen:false就可以了
  1.  editor : {
    type : 'popup',
    valueField : 'courser_id',
    textField : 'courser_name',
    grid : {
    columns : [{
    display : '课程名称',
    name : 'courser_name'
    }
    ],
    width : 360, //指定弹出框宽度
    enabledSort : false,
    data : $.extend({}, courser_data),
    checkbox : true,
    usePager : false,
    rownumbers : false,
    frozen : false
    }
2.解决指定宽度不生效的问题
    找到源码ligerui.all.js第16546行,可以看到这里并未获取参数中传过来的width,height属性值,为了使用方便只好修改一下源代码,指定grid的width和height即为Dialog的宽和高。
  1.  if(!g.popupFn){
    var options ={
    grid : gridOptions,
    condition : p.condition,
    valueField : p.valueField,
    textField : p.textField,
    split : p.split,
    lastSelected : getLastSelected(),
    onSelect :function(e){
    if(g.trigger('select', e)==false)
    return;
    if(p.grid.checkbox){
    g.addValue(e.value, e.text);
    g.removeValue(e.remvoeValue, e.remvoeText);
    }else{
    g.setValue(e.value);
    g.setText(e.text);
    }
    g.trigger('selected', e);
    },
    selectInit :function(rowdata){
    var value = g.getValue();
    if(!value)
    returnfalse;
    if(!p.valueField ||!rowdata[p.valueField])
    returnfalse;
    return $.inArray(rowdata[p.valueField].toString(), value.split(p.split))!=-1;
    }
    };
    //modify by Rhys Lee 用于支持设置弹出框高度和宽度
    if(gridOptions.width){
    options.width = gridOptions.width;
    }
    if(gridOptions.height){
    options.height = gridOptions.height;
    }
    //modify end
    g.popupFn = $.ligerui.getPopupFn(options);
    }
    第一次写博客,肯定有不好的地方,希望大家指正。(请轻拍)
 
 

【LigerUI实战】Grid弹出编辑popup的更多相关文章

  1. jquerymobile知识点三:弹出层popup

    弹出层popup很简单,主要就是弹出验证,登陆注册,提交信息之类的,下面是我写好的一个demo... <div data-role="popup" id="popu ...

  2. datatables.js 简单使用--弹出编辑框或添加数据框

    内容:选中某一条记录,弹出编辑框 环境:asp.net mvc ,  bootstrap 显示效果: 代码: 至于怎么弄多选框,在上一篇博客里已经有说明. 主要用到了bootstrap的模态窗,下面代 ...

  3. 使用Vue-TreeSelect组件的时候,用watch变量方式解决弹出编辑对话框界面无法触发更新的问题

    在前篇随笔<使用Vue-TreeSelect组件实现公司-部门-人员级联下拉列表的处理>中介绍了Vue-TreeSelect组件的使用,包括使用v-modal绑定值,normalizer ...

  4. 关于淘宝店铺装修弹出层popup的记录

    小龙最近做了一下下淘宝的店铺装修,里面封装的widget深不见底,刚刚整明白popup,也就是弹出层的使用方法,大神勿喷: <div class="area001">触 ...

  5. layer弹出层,结合art-template实现弹出编辑

    模板 <!-- 模板 --> <script id="render-tpl" type="text/html"> <div cla ...

  6. [JavaScript] 弹出编辑框

    效果:单击图片copy,双击图片或者点Edit都会打开编辑窗口 Style <style> .black_overlay{ display: none; position: absolut ...

  7. art-template 弹出编辑

    <!-- 模板 --> <script id="render-tpl" type="text/html"> <div class= ...

  8. 在指定控件位置弹出popup window

    先看效果图 黄色的就是弹出的popup window 首先自定义一个view用来显示,文件名为layout_my_view.xml <?xml version="1.0" e ...

  9. PropertyGrid—为复杂属性提供下拉式编辑框和弹出式编辑框

    零.引言 PropertyGrid中我们经常看到一些下拉式的编辑方式(Color属性)和弹出式编辑框(字体),这些都是为一些复杂的属性提供的编辑方式,本文主要说明如何实现这样的编辑方式. 一.为属性提 ...

随机推荐

  1. Android View的生命周期

    View生命周期相关方法 View是什么?官方源码注释中的定义:这个类是用户接口的基础构件.View表示屏幕上的一块矩形区域,负责绘制这个区域和事件处理. View是所有widget类的基类,Widg ...

  2. hackerrankWeek of Code 32

    hackerrankWeek of Code 32 A.Duplication B.Fight the Monsters! C.Circular Walk D.Geometric Trick E.Ba ...

  3. 浅谈 django Models中的跨表

    跨表操作在数据库操作非常常用,虽然其会降低读取数据的性能,但是它能节约数据在硬盘中的占用,优化数据表的结构和各自之间的关系. 在sql中,一般跨表需要用到 join 关键字 select * from ...

  4. python学习笔记(datetime、字符串转换)

    datetime对象与字符串可以互相转化 代码如下: from datetime import datetime def datetime_string(time): return time.strf ...

  5. python中*和**的打包和解包

    python中的*和**,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的 一. 打包参数 * 的作用:在函数定义中,收集所有的位置参数到一个新的元组,并将这个元组赋值给变量arg ...

  6. 计蒜客button 概率

    中文题意不多说,这题主要是数据太大,无法递推,所以用欧拉常数来解决 对于调和级数1/1+1/2+...+1/n=ln(n)+C+1/(2*n),C为欧拉常数,再加上ceil向上取整就可以了 #incl ...

  7. css中实现显示和隐藏(转)

    CSS中的display和visibility      在平时的开发过程中,总是会遇到一些文字在特定的场景下显示或者隐藏来达到我们想要的效果,css中display和visibility语法,他们都 ...

  8. Struts09---验证框架

    01.创建登录界面 <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  9. vim技巧记录

    安装插件 有个很好的同志已经做了一个比较全的插件集,下载就可以用: mv ~/.vimrc ~/.vimrcbak mv ~/.vim ~/.vimbak git clone https://gith ...

  10. macOS 下 Visual Studio Code(VSCODE)安装配置及应用

    Visual Studio Code 重新定义了 Code 编辑. 在任何操作系统上编辑和调试应用程序内置 Git 支持1000 种以上的扩展免费和开源 为什么使用VSCODE? 我们来看看以下功能: ...