dojo1.2 grid内存泄漏问题 以及 对话框的一个BUG

1)dojo 1.2 版本 Compat Grid内存泄漏问题

项目开发使用的是dojo 1.2,进入项目后期,发现IE(项目使用的是IE7)脚本内存泄漏严重,最终定位出是使用的widget--dojox.grid.compat.Grid存在内存泄漏,这个问题可以在起测试页面重现,用IE打开测试页/dojox/grid/compat/tests/test_grid.html,如果仅打开,反复刷新IE页面,这个时候是不会发生泄漏的,但是如果点击表格的单元格后刷新页面,就会发现IE内存不断上涨.这个问题困扰我很久,并且使用微软的IEJSLeaksDetecto工具也检测不出来(顺便说一句,这个工具的检测不是很准,千万不要迷信).当时抱着试试看的心理,在dojo的网站上写了一个BUG REPORT,老外会阴很及时,一个叫Dylan的工程师回信说dojo1.4解决了这个问题.这个消息让我很兴奋,可是当我下载下dojo1.4解包之后又很失望,原来1.4已废弃了dojox.grid.compat.Grid,虽然在Readme中说如果要使用这个widget可以解压目录中的一个压缩包,但是这个widget没有任何更新,问题依然存在.

无奈,只能研究源代码,一般解决IE内存泄漏的代码,都是写在对象销毁函数中,终于我发现了如下代码(还有一个注释,老外真是好心阿:))

将如上代码稍作修改,增加到1.2的代码中,上下文关系如下,则问题可以解决

2) 1.2版本对话框的问题

在我们的项目中存在如下场景,在打开一个对话框后,通过点击对话框的一个按钮,再打开一个对话框,发现第一个对话框中,TAB可以正常的切换界面元素,而第二个对话框中TAB见功能异常,记过定位发现是Dialog.js中绑定键盘事件的代码

this._modalconnects.push(dojo.connect(dojo.doc.documentElement,"onkeypress",this,"_onKey"));

这意味着,如果打开N个对话框,则document会被绑定N次onkeypress事件,所以修改

this._modalconnects.push(dojo.connect(this。domNode,"_onKey"));

解决

相关文章

我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易...
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以...
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部...
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforja...
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑...
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这...