jueyue 发表于 2013-8-14 23:15:06

关于<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/>公用一个
函数自己改写的,好了就写到这里了,
内酷童鞋只要给那个门店名称加上自定义函数就可以了

GIN 发表于 2013-8-15 11:00:57

这个改动放在目前的ui库中去 对已有的功能有影响吗?

jueyue 发表于 2013-8-15 22:55:36

没有啥影响,再测试下,再放到里面去
页: [1]
查看完整版本: 关于<t:dgCol点击事件的一点修改