最近为分公司的项目做外援,做起了全栈的活。被公司自研架构磨灭的几乎忘掉了其他技能,正好新项目决定重新搭个架构,与同事们讨论过后,决定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. RedHat 6.4企业版利用iso镜像做本地yum源

    修改文章:http://linux.cn/article-1017-1.html 而RedHat的yum则需要注册付费才能使用,如果不这样则有两种解决方案 1. 利用iso镜像做本地yum源 2. 利 ...

  2. Memcached set 命令

    Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中. 如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用. 语法: s ...

  3. Pandas稀疏数据

    当任何匹配特定值的数据(NaN/缺失值,尽管可以选择任何值)被省略时,稀疏对象被“压缩”. 一个特殊的SparseIndex对象跟踪数据被“稀疏”的地方. 这将在一个例子中更有意义. 所有的标准Pan ...

  4. MSSQL2008 临时总结文档2014

    2.  索引可以建立在基表上(基表索引),也可以视图上称为视图索引. 基表索引是建立在表数据中的,故视图索引是建立在查询后的结果集上的. (假如建立了视图索引)当从视图中取数据的时候,优化查询分析器会 ...

  5. mongDB网址

    http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html

  6. 【spark】分区

    RDD是弹性分布式数据集,通常RDD很大,会被分成多个分区,保存在不同节点上. 那么分区有什么好处呢? 分区能减少节点之间的通信开销,正确的分区能大大加快程序的执行速度. 我们看个例子 首先我们要了解 ...

  7. LeetCode OJ:Pow(x, n) (幂运算)

    Implement pow(x, n). 幂运算,简单的方法snag然很好实现,直接循环相乘就可以了,但是这里应该不是那种那么简单,我的做法使用到了一点递归: class Solution { pub ...

  8. react 学习文章

    生命周期 学习笔记 一些坑 项目完成后总结 理解Immutable 是否要同构如何同构 react组件最佳实践 redux集合所有的state props来源, 页面所有状态 数据的唯一来源 reac ...

  9. [置顶] C语言学习入门

    编译文件:cc -c one.c two.c  生成.o目标文件 链接文件:cc one.o two.o     默认生成 a.out 执行文件 指定生成的可执行文件名   cc -o one one ...

  10. iOS开发之谈谈App应用的架构搭建(推荐给大家看)

    1.iOS应用架构谈 开篇: 2.iOS应用架构谈 view层的组织和调用方案: 3.iOS应用架构谈 网络层设计方案: 4.iOS应用架构谈 本地持久化方案及动态部署: 5.iOS应用架构谈 组件化 ...