[翻译文章,原文请参考:http://weblogs.asp.net/scottgu/archive/2007/06/21/vs-2008-javascript-intellisense.aspx]
VS2008中网络开发人员非常喜欢的一个特性就是它自带的Javascript智能感应功能。这个功能在Visual Web Developer 2008 Express Edition和Visual Studio中都能够使用,它让使用JavaScript和构建AJAX应用程序大大得变简单(本人译注:更准确的说,应该是大大提高了使用JavaScript和构建AJAX应用程序的生产效率)。下面将快速浏览Javascript智能感应功能的部分内容。
JavaScript 类型推断(JavaScript Type Inference)
一个你可以立即注意到的事情是:当你在VS2008中的Script块中输入代码时,会有JavaScript关键字和语言特性的提示框,如下所示:
JavaScript是一个动态语言,并且它不支持显式的类型声明。在过去为它实现一个好的智能感应系统很困难。Visual Studio 2008 添加了对于类型推断(type inference)的支持(本人译注:所谓的类型推断就是根据你的当前输入,推断出该输入所代表的类型并根据推断的类型给出智能提示) 。这就意味着VS2008需要持续的评估和计算一个JavaScript块在怎样被使用并动态的推断出代码中变量的使用方式和类型信息以提供精确的智能感应提示信息。例如,在下面的代码中,Visual Studio将推断出一个由"document.getElementById()"方法返回的变量是一个HTML元素,并为这个变量提供适合HTML元素的智能感应提示信息。
如果我接下来把一个数值赋给了"myElement"变量(在Javascript中,这个变量转换成一个数值类型),注意下面VS是怎样检测这个变化并在赋值语句后提供适合整数类型的智能感应提示:
对外部JavaScript库的智能感应(Intellisense for External JavaScript Libraries)
VS2008不仅支持对内嵌Script代码的智能感应,而且对引用的外部JavaScript文件也支持。例如,假设我们有一个"getMessage"函数,它定义在"Util.js"文件中(如下图所示):
我可以简单地通过标准Javascript引用标识把它加入我的页面,并且我将自动获得与该文件相关的智能感应提示信息。如下图所示:
注意,我们不需要做任何其他的事情,VS还能够自动提供方法的基本参数信息,如下所示:
为JavaScript添加智能感应提示信息(Adding Intellisense Hints to JavaScript)
如上所见,Visual Studio会自动为标准的JavaScript代码提供方法名字和参数的基本帮助/提示信息。另外,你还可以通过给你的JavaScript代码添加注释的方式来让提示信息更加丰富。智能感应系统会提取你的注释信息并在你使用该方法或者库的时候使用这些信息。例如,我可以为"util.js"文件中的"getMessage"函数添加下面的注释:
当我在"Default.aspx"再次输入该函数名称时,Visual Studio会自动显示方法的"summary"信息:
同样,还有参数的细节信息:
我们还将提供一个工具帮助你在完成程序后自动移除你的注释(并且压缩空格和文件大小)。关于VS和ASP.NET AJAX支持的注释格式细节,请参考Bertrand Le Roy的博文。
在外部JavaScript文件中使用智能感应提示功能(Intellisense within External JavaScript files)
显然,就如同你在一个.htm文件或.apsx文件中的Script块内部一样,你在使用外部Javascript文件也有了完整智能感应提示功能。另外,外部JavaScript文件的一个有趣特性就是它们还可以使用声明在另外一个JavaScript文件中的变量和函数,只要该JavaScript文件也被同一个页面加载。例如,如果我如下在一个页面中声明了两个外部JavaScript文件的引用:
在"MyLibrary.js"文件中的JavaScript代码就可以调用声明在"Util.js"文件中的方法。你可以通过在外部文件头部添加注释"/// <reference>"来让Visual Studio在"MyLibrary.js"中自动提供与"Util.js"库相关的智能感应提示信息。一旦你这样做,你就同样能够得到(定义在外部文件中的)方法和变量的完整智能感应提示信息:
当你把JavaScript代码分割存放在多个文件时,这个特性就会非常有用。
当引用ASP.NET AJAX客户端JavaScript库,你可以添加一个"<reference>"来指向(本人译注:通过"path"属性)你自己的JS文件(你需要手动把这个文件添加到你的工程中)。如果这个JavaScript库是由"<asp:scriptmanager>"动态生成并添加到页面中,你也可以用一个包含name属性值的"<reference>"元素指向它。如下所示:
一旦做完这些,你就可以在ASP.NET AJAX中获得对于JavaScript库和类型的完整智能感应提示信息。
使用ASP.NET AJAX调用Web Services(Calling Web Services using ASP.NET AJAX)
ASP.NET AJAX 使暴露服务器端方法以让客户端JavaScript代码来调用和访问变得很容易。例如,假设我们在一个.asmx web-service中定义了如下简单Web方法:
然后,我如下在页面中"<asp:scriptmanager>"控件中添加一个引用,使用ASP.NET AJAX自动产生一个客户端JavaScript代理对象并用这个代理对象在客户端使用JSON协议调用Web方法。
VS2008非常酷的地方是当你如上面在"<asp:scriptmanager>"中声明了一个web-serive的引用后,它能自动在这个页面里添加对客户端JavaScript代理对象智能感应支持。如下图所示:
显然,这让识别服务器端方法并异步调用它们变得更容易。你可以使用这些服务器端方法在客户端和服务器端交换数据。你还可以使用这些回调函数通过AJAX UI模版技术来从服务器端获得HTML UI( 我在这里有详细描述)并动态更新页面。
创建可重用得ASP.NET AJAX行为、控件和库(Creating Re-Usable ASP.NET AJAX Behaviors, Controls and Libraries)
ASP.NET AJAX为在JavaScript中定义类、接口和其他面向对象的概念提供了系统级支持。这让定义封装功能的可重用JavaScript库并在多个页面和应用程序(不需用担心和别的JavaScript代码和库相冲突的问题)中安全重用它们变得更容易。VS2008提供了新的"Add-item"模版(如下图所示),它让创建新的ASP.NET AJAX行为、控件和库很容易。
ASP.NET AJAX使用JavaScript中的"prototype"模式让你定义类和接口。例如,我可以创建使用上面的工程项模版和"prototype"模式如下创建一个封装的JavaScript类(注意,Visual Studio默认创建的JavaScript名字空间和我的项目名字空间相同):
显然,当我在任何页面或者别的JavaScript文件中使用我上面新创建的库时,也可以使用完整的智能感应功能:
总结(Summary)
希望上面的介绍能够给你带来对新的JavaScript智能感应功能大致了解。在接下来的博文中我还会解释一些VS2008带来新JavaScript调试功能和ASP.NET、 ASP.NET AJAX控件工具库对于WYSIWYG(What you see is what you get)设计的支持。要更多了解ASP.NET AJAX (和怎样在ASP.NET 2.0中使用我上面描述的运行时特性),我强烈推荐查看下面两本新书
注意:因为新的VS 2008 multi-targeting support特性,你可以在.NET 3.5(自带ASP.NET AJAX支持)和ASP.NET 2.0应用程序中同样使用我上面描述的JavaScript智能感应功能。这就为你开始使用VS 2008(即使你仅仅在.NET 2.0应用程序中使用)提供一个充足的理由。
希望这个有用!