2006年10月27日星期五

Microsoft Ajax Beta1 - 边学边用边补充 (Part 1 - Debug)

这Beta1的更新多就不再强调了,关键就是它对以客户端为中心的开发人员不太友善。客户端框架正在作大幅度修改,这个我不反对,但是将明显一个修改到一半的东西扔出来显然就不太好。Beta1里面的客户端框架是没问题的,不过Preview中的就衔接不上了,有些CTP原有的功能没有在Preview中保留,有些则看得出是修改中的,例如debug版的代码不太工整,enclosure和prototype书写方式混合。

将老项目由July CTP迁移到Beta1 + Preview,第一件事当然是测试更新后原有功能是否正常,不正常的地方是由什么引起的,但我马上就发现可爱的debug.dump和debug.trace都不见了,这样我可没办法做项目迁移啊,因为连基本的debug功能都没有。搜索了一下Beta1的代码,发现只有debug.assert和debug.fail;而在Preview中则有如下一段代码:
if(!debug.trace) {
  debug.trace = function debug$trace(message) {}
}
这段代码的用意很显然,debug.trace已经被去掉了,然而CTP迁移而来的代码中可能有用到debug.trace的,这样做能避免对debug.trace的调用引发脚本错误。

为了完成迁移,首先要把debug.dump和debug.trace补上,尝试的就是把July CTP的代码借过来用。代码借过来后,debug.trace基本没问题,就是第一行那个Debug.writeln不知道用来干什么的;debug.dump的问题就一大堆,这是由于一些CTP中存在的类改名了或消失了,例如Sys.IArray、Sys.ITypeDescriptorProvider、Type.Event。我开头的做法是把debug.dump中不能用的代码段注释掉,后来Jeffrey Zhao为ASP.NET AJAX 1.0 Beta补充trace和dump功能一文中提供了一个更好的版本,我也就参考着那个作了修改,制作出我自己的版本:用于MS AJAX Beta1 + Preview的debug补充包

由于我还没有仔细看过Beta1的原代码,所以采用了保守修改的原则,也就是尽可能少的改动。因此,我仅仅作了如下替换:

  • Sys.IArray.isImplementedBy -> Array.isInstanceOfType
  • Sys.ITypeDescriptorProvider -> Sys.Preview.ITypeDescriptorProvider
  • Type.Event-> Sys.UI.DomElement

 

需要说明的是,Jeffrey Zhao那个适用于不加载PreviewScript.js的场合,而我的这个必须和PreviewScript.js一起使用并且在其之后加载。另外为了方便我直接在浏览器地址栏调用debug.dump和debug.trace,我为它们提供了更简短的别名:$dump和$trace。

没有评论:

发表评论