`
jueyue
  • 浏览: 195531 次
社区版块
存档分类
最新评论

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

 
阅读更多

今天一位朋友问到这个问题 <ignore_js_op style="word-wrap: break-word; color: rgb(68, 68, 68); font-family: Tahoma, Helvetica, SimSun, sans-serif; font-size: 13.63636302947998px; line-height: 19.09090805053711px;">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/>公用一个
函数自己改写的,好了就写到这里了,
内酷童鞋只要给那个门店名称加上自定义函数就可以了

2
0
分享到:
评论
1 楼 Knight丶飞 2017-03-23  
想请问下,用了你这个方法后与replace这个函数冲突怎么解决,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics