|
今天一位朋友问到这个问题
他想在门店名称后面添加一列门店商品,用来点击跳转,之前一想想如何把<t:dgFunOpt/>这个标签往前提位置
可是看了代码,实现的可能性不大,后来看到<t:dgCol />提供了自定义函数的参数,真想说句X,这不是浪费我时间
,结果想了funname="test"不执行,坑爹啊.看了下源码DataGridTag 的979行,我的有改动,应该在附近- // 自定义链接
- if (column.getUrl() != null) {
- sb.append(",formatter:function(value,rec,index){");
- this.getFun(sb, column);
- sb.append("}");
复制代码 必须插入url可是看下中这个getFun的方法- /**
- * 列自定义函数有url参数
- *
- * @param sb
- * @param column
- */
- protected void getFun(StringBuffer sb, DateGridColumn column) {
- String url = column.getUrl();
- url = formatUrl(url);
- sb.append("var href="<a style=\'color:red\' href=\'#\' onclick=" + column.getFunname() + "('" + column.getTitle() + "','" + url + "')>";");
- sb.append("return href+value+\'</a>\';");
- }
复制代码 我去,只能提供url这个参数,这个我想要的<t:dgFunOpt/>这种功能不一样啊,怎么办,自己搞呗
同样我们也是用funname这个方法,我们不穿url这样就可以和原来的方法区分了(不过现在有个bug___
所有的这种操作都是走的easyui的formatter:function方法 如果ni还用了replace这中函数,那么我这个函数就失效了
后面再改这个问题)这样,我们只要添加- // 自定义链接
- if (column.getUrl() != null) {
- sb.append(",formatter:function(value,rec,index){");
- this.getFun(sb, column);
- sb.append("}");
- }else if (!column.getFunname().equals("openwindow")) {
- sb.append(",formatter:function(value,rec,index){");
- this.getFunNoUrl(sb, column);
- sb.append("}");
- }
复制代码 这个else就是没有url,我们来写自己的funtion,这里我添加了funNoUrl方法- /**
- * 列自定义函数
- *
- * @param sb
- * @param column
- */
- protected void getFunNoUrl(StringBuffer sb, DateGridColumn column) {
- String name = TagUtil.getFunction(column.getFunname());
- sb.append("var href="<a href=\'#\' onclick=" +name+"("+
- TagUtil.getFunParams(column.getFunname()) +")>";");
- sb.append("return href+value+\'</a>\';");
-
- }
复制代码 这里和<t:dgFunOpt/>一样调用了tagutil的两个方法,就可以获得同样的效果了,
另外说一下,自己改写了TagUtil.getFunParams()这个方法- /**
- * 获取自定义函数的参数
- *
- * @param functionname
- * @return
- */
- public static String getFunParams(String functionname) {
- int index = functionname.indexOf("(");
- String param="";
- if (index != -1) {
- String testparam = functionname.substring(functionname.indexOf("(")+1,
- functionname.length() - 1);
- if(StringUtil.isNotEmpty(testparam))
- {
- String[] params=testparam.split(",");
- for (String string : params) {
- param+=(string.indexOf("{")!=-1)?
- ("'"+"+ string.substring(1,string.length()-1) + "+"',")
- :("'"+rec."+ string + "+"',");
- }
- }
- }
- param+="'"+index+"'";//传出行索引号参数
- return param;
- }
复制代码 这样如果你这样写funname="test(id,name,{jueyue})"
function test(id,name,type)这里type就可以拿到jueyue这个参数了这个是之前两个<t:dgFunOpt/>公用一个
函数自己改写的,好了就写到这里了,
内酷童鞋只要给那个门店名称加上自定义函数就可以了
|
|