关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 12358|回复: 2

关于<t:dgCol点击事件的一点修改

[复制链接]
发表于 2013-8-14 23:15:06 | 显示全部楼层 |阅读模式
今天一位朋友问到这个问题 QQ截图20130814224823.png
他想在门店名称后面添加一列门店商品,用来点击跳转,之前一想想如何把<t:dgFunOpt/>这个标签往前提位置
可是看了代码,实现的可能性不大,后来看到<t:dgCol />提供了自定义函数的参数,真想说句X,这不是浪费我时间
,结果想了funname="test"不执行,坑爹啊.看了下源码DataGridTag 的979行,我的有改动,应该在附近
  1. // 自定义链接
  2.                         if (column.getUrl() != null) {
  3.                                 sb.append(",formatter:function(value,rec,index){");
  4.                                 this.getFun(sb, column);
  5.                                 sb.append("}");
复制代码
必须插入url可是看下中这个getFun的方法
  1. /**
  2.          * 列自定义函数有url参数
  3.          *
  4.          * @param sb
  5.          * @param column
  6.          */
  7.         protected void getFun(StringBuffer sb, DateGridColumn column) {
  8.                 String url = column.getUrl();
  9.                 url = formatUrl(url);
  10.                 sb.append("var href="<a style=\'color:red\' href=\'#\' onclick=" + column.getFunname() + "('" + column.getTitle() + "','" + url + "')>";");
  11.                 sb.append("return href+value+\'</a>\';");

  12.         }
复制代码
我去,只能提供url这个参数,这个我想要的<t:dgFunOpt/>这种功能不一样啊,怎么办,自己搞呗
同样我们也是用funname这个方法,我们不穿url这样就可以和原来的方法区分了(不过现在有个bug___
所有的这种操作都是走的easyui的formatter:function方法  如果ni还用了replace这中函数,那么我这个函数就失效了
后面再改这个问题)这样,我们只要添加
  1. // 自定义链接
  2.                         if (column.getUrl() != null) {
  3.                                 sb.append(",formatter:function(value,rec,index){");
  4.                                 this.getFun(sb, column);
  5.                                 sb.append("}");
  6.                         }else if (!column.getFunname().equals("openwindow")) {
  7.                                 sb.append(",formatter:function(value,rec,index){");
  8.                                 this.getFunNoUrl(sb, column);
  9.                                 sb.append("}");
  10.                         }
复制代码
这个else就是没有url,我们来写自己的funtion,这里我添加了funNoUrl方法
  1. /**
  2.          * 列自定义函数
  3.          *
  4.          * @param sb
  5.          * @param column
  6.          */
  7.         protected void getFunNoUrl(StringBuffer sb, DateGridColumn column) {
  8.                 String name = TagUtil.getFunction(column.getFunname());
  9.                 sb.append("var href="<a  href=\'#\' onclick=" +name+"("+
  10.                 TagUtil.getFunParams(column.getFunname()) +")>";");
  11.                 sb.append("return href+value+\'</a>\';");
  12.                
  13.         }
复制代码
这里和<t:dgFunOpt/>一样调用了tagutil的两个方法,就可以获得同样的效果了,
另外说一下,自己改写了TagUtil.getFunParams()这个方法
  1. /**
  2.          * 获取自定义函数的参数
  3.          *
  4.          * @param functionname
  5.          * @return
  6.          */
  7.         public static String getFunParams(String functionname) {
  8.                 int index = functionname.indexOf("(");
  9.                 String param="";
  10.                 if (index != -1) {
  11.                         String testparam = functionname.substring(functionname.indexOf("(")+1,
  12.                                         functionname.length() - 1);
  13.                         if(StringUtil.isNotEmpty(testparam))
  14.                         {
  15.                                 String[] params=testparam.split(",");
  16.                                 for (String string : params) {
  17.                                         param+=(string.indexOf("{")!=-1)?
  18.                                                         ("'"+"+ string.substring(1,string.length()-1) + "+"',")
  19.                                                         :("'"+rec."+ string + "+"',");
  20.                                 }
  21.                         }
  22.                 }
  23.                 param+="'"+index+"'";//传出行索引号参数
  24.                 return param;
  25.         }
复制代码
这样如果你这样写funname="test(id,name,{jueyue})"
function test(id,name,type)这里type就可以拿到jueyue这个参数了这个是之前两个<t:dgFunOpt/>公用一个
函数自己改写的,好了就写到这里了,
内酷童鞋只要给那个门店名称加上自定义函数就可以了
发表于 2013-8-15 11:00:57 | 显示全部楼层
这个改动放在目前的ui库中去 对已有的功能有影响吗?
 楼主| 发表于 2013-8-15 22:55:36 | 显示全部楼层
没有啥影响,再测试下,再放到里面去
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表