代码改变世界

不看不知道,一看吓一跳,Atlas中有些Bug还真让人无语。

2006-10-06 02:17  Jeffrey Zhao  阅读(2733)  评论(9编辑  收藏  举报
  阅读了Atlas的代码才发现,Atlas中有些Bug真是让人无话可说。除去以前提到过的有些类成员在重载时奇怪的代码之外,现在在阅读IEDragDropManager时也发现了点有趣的Bug。

按照我的计划,接下来会写一系列文章来讨论浏览器中的Drag & Drop以及深入分析一下在Atlas中Drag & Drop支持代码的行为以及使用与扩展的做法,但是在做阅读和分析Atlas代码之后,发现在IEDragDropManager中有趣的bug。简单的说,大家可以先查看一下在AtlasUIDragDrop.js中,IEDragDropManager类的以下几个方法:

function dragEnterHandler()
function dragLeaveHandler()
function dragOverHandler()
function dropHandler()

在这些方法里都有这样的代码:

this._dropTarget.xxxx

非常有趣的是,this._dropTarget从来没有被赋过值!而被拖动的HTML元素倒有一个_dropTarget,是在registerDropTarget时被赋与的,可惜也从来没有被使用过。很显然,Atlas开发人员把它们混淆了。如果代码被执行到了这里……一个无法避免的Error将被抛出。

不过一般来说,大家在使用时不用担心,因为那些Bug真的很难被触发。首先,那些方法一般在使用时就几乎不太会被执行到,其次如果要执行到这句代码还要通过一个比较特殊的条件判断。要得到一个触发Bug的例子可能的确需要在看过代码之后有针对性地写出。具体的做法我会在接下来的文章中进行解释。有兴趣的朋友可以先尝试一下,比如尝试一下Dflying兄在《使用ASP.NET Atlas实现拖放(Drag & Drop)效果(下)》,上面提到的那些方法,都没有被触发过。不过Atlas中的Drag & Drop模型,依旧是非常完整的一个。

希望以后能有更多的心得体会和大家分享。