JR 精品文章 - 改写dhtmlxgrid的calender,1.2版本中的有问题。
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » JSP/Servlet/JSF 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
改写dhtmlxgrid的calender,1.2版本中的有问题。
rautinee 原创   更新:2007-03-02 09:03:41  版本: 1.0   

关键字: UI   dhtmlxgrid     
dhtmlxgrid是我在javaeye上面发现的一个不错的东东,并决定把dhtmlxgrid引入到我们的项目中来,但是在看calender部分的时候发现1.2 standard 版本的有问题,就是在选择日期的时候,点击翻月的小图标,日期选择界面会消失。但是1.0的pro版本没有这个问题,我看了一下代码,这应当与程序当中对detach的处理那块有关,无奈dhtmlxgrid的代码太长了,看的俺是头昏眼花,腿抽筋,几次乱改都未成功,只好想想看看有什么旁门左道可以替代他的功能。

我原先项目中的日期选择组件用的是popcalender.js,对他比较熟悉就从他下手,修改的方案如下:抛弃yahoo UI的calender组件,使用popcalender来替代,需要更改dhtmlxgrid_excell_calender.js和popcalender.js这两个文件。在原先的代码中,作者应该是通过调用detach来实现对cell的赋值的,但是calender有个特殊性,就是他需要翻月操作的,而据我观察,在双击调用出日期选择界面后,只要点击鼠标,即调用detach,执行里面的代码,这就是为什么点击翻月按钮,选择界面会关闭,而且detach只会执行一次。我采用的解决方案是修改pop当中的closecalender函数,他是在用户选择日期的时候调用的,在他里面对当前操作的cell进行赋值操作,这样,问题就会迎刃而解了。

先看dhtmlxgrid_excell_calender.js

js 代码
 

/*   
Copyright Scand LLC http://www.scbr.com   
This version of Software is free for using in GNU GPL applications. For other use or to get Professional Edition please contact info@scbr.com to obtain license   
*/     
   
function eXcell_calendar(cell){    
 try{    
 this.cell = cell;    
 this.grid = this.cell.parentNode.grid;    
}catch(er){}    
 this.edit = function(){    
    var arPos = this.grid.getPosition(this.cell);    
    popUpCalendar(this.cell, this.cell, "yyyy-mm-dd",-1,-1);    
    this.cell._cediton=true;    
    this.val=this.cell.val;    
        
}    
    this.getValue = function(){    
    if(this.cell.val)return this.cell.val;    
    return this.cell.innerHTML.toString()._dhx_trim()    
}    
   
   
}    
eXcell_calendar.prototype = new eXcell;    
eXcell_calendar.prototype.setValue = function(val){    
   
   
 if(!val || val.toString()._dhx_trim()=="") val="";    
   
 this.cell.val=val.toString();    
 if(this.cell.val=="NaN"){    
 this.cell.val="";    
 this.cell.innerHTML=" ";    
     
}    
else if(this.cell.val=="")    
    {    
this.cell.val="";    
this.cell.innerHTML=" ";    
   
}    
 else   
    {     
this.cell.innerHTML = this.cell.val;    
    }    
   
}    
   
 

 在popcalender当中主要是修改closeCalender这个函数,在他里面添加一下两段代码:

js 代码
 

//ctlToPlaceValue在这个地方就是grid当中的cell 
ctlToPlaceValue.val = constructDate(dateSelected,monthSelected,yearSelected);    
ctlToPlaceValue.innerHTML = ctlToPlaceValue.val;   

 还有就是在popUpCalendar函数中,在 

crossobj.left = fixedX==-1 ? ctl.offsetLeft + leftpos : fixedX   

前面加一句

js代码

leftpos<0?leftpos=0:leftpos=leftpos;   

ok,get it!

ie6和firefox1.5测试通过,修改后的代码我打包了,希望能够对使用dhtmlxgrid的朋友提供些帮助,例子可以看samples目录下面的 复件 calendar_grid.html文件

 
附件:dhtmlxGrid1.2-calender.rar(404K) 

版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     14       0
作者其它文章: 作者全部文章

这个文章共有 0 条评论
主题: 使用xmlhttp和Java session监听改善站内消息系统 上一篇文章
返回文章列表 返回〔JSP/Servlet/JSF〕
下一篇文章 主题: 用jsp动态输出excel文档和中文乱码问题的解决


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号