关于<t:dgCol点击事件的一点修改
今天一位朋友问到这个问题他想在门店名称后面添加一列门店商品,用来点击跳转,之前一想想如何把<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=\"<ahref=\'#\' 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/>公用一个
函数自己改写的,好了就写到这里了,
内酷童鞋只要给那个门店名称加上自定义函数就可以了
这个改动放在目前的ui库中去 对已有的功能有影响吗? 没有啥影响,再测试下,再放到里面去
页:
[1]