Visual Studio 2015高级编程(第6版)
上QQ阅读APP看书,第一时间看更新

7.2 JavaScript Intellisense

如果构建Web应用程序,就会使用JavaScript为用户提供更丰富的客户端体验。C#和Visual Basic是编译型语言,而JavaScript是解释型语言,这意味着在传统上,JavaScript程序的语法要在加载到浏览器之后才验证。尽管这在运行期间会提供很大的灵活性,但需要训练、技巧和对测试的特别强调,才能避免许多常见错误。

此外,在开发用于浏览器的JavaScript组件时,必须跟踪大量离散的元素。这可能包括JavaScript语言特性本身、HTML DOM元素、手工建立的库和第三方库。幸好,Visual Studio 2015为JavaScript提供了一个全面的IntelliSense,有助于跟踪所有这些元素,并对语法错误发出警告。

在代码编辑器窗口中输入JavaScript时,Visual Studio会列出关键字、函数、参数、变量、对象和属性,就像使用C#或Visual Basic一样。Visual Studio可以列出内置的JavaScript函数和对象、在定制脚本中定义的JavaScript函数和对象,以及在第三方库中找到的JavaScript函数和对象。Visual Studio还可以检测并突出显示JavaScript代码中的语法错误。

每个已安装Visual Studio 2015的键盘快捷键取决于所选的设置(即Visual Basic Developer、Visual C# Developer等)。本章中使用的所有快捷键都基于使用General Developer Profile设置。

Microsoft公司自从Internet Explorer 3.0以来就有自己的JavaScript版本,名为JScript。从技术角度看,Visual Studio 2015中的JavaScript工具用于处理Jscript,所以有时菜单项和窗口标题包含这个名称。实际上,这两种语言的差别非常小,工具使用任意一种语言都能很好地工作。

7.2.1 JavaScript IntelliSense上下文

为防止不小心引用不可用的JavaScript元素,Visual Studio 2015根据当前编辑的JavaScript块所在的位置生成了一个IntelliSense上下文。这个上下文由以下一些项构成:

●当前的脚本块,这包括.aspx、.ascx、.master、.html和.htm文件的内联脚本块。

●通过< script />元素或ScriptManager控件导入当前页面的脚本文件。这里,导入的脚本文件必须有.js扩展名。

●通过引用指令引用的脚本文件(参见下一节)。

●对XML Web Services的引用。

●Microsoft AJAX Library中的项(假定在支持AJAX的ASP.NET Web应用程序中工作)。

7.2.2 引用另一个JavaScript文件

有时一个JavaScript文件依赖另一个JavaScript文件的基本功能。此时,使用它们的页面常引用这两个文件,但没有明确定义引用。因为没有显式引用,所以Visual Studio 2015不能把带有基本功能的文件添加到JavaScript IntelliSense上下文中,用户就得不到全面的IntelliSense支持。例外情况是在创建基于JavaScript的Windows Store应用程序时,会遍历所有的引用来提供全面的IntelliSense上下文。

Visual Studio会在上下文中跟踪文件,在其中一个文件改变时,更新JavaScript IntelliSense。有时这种更新可能是待定的,JavaScript IntelliSense数据就会过时。选择Edit | IntelliSense | Update JScript IntelliSense命令,可以强制Visual Studio更新JavaScript IntelliSense数据。

为让Visual Studio找到带有基本功能的文件,并添加到上下文中,可以使用一个reference指令,提供对该文件的引用。reference指令是一种特殊的注释,提供了另一个文件位置的信息。使用reference指令可以引用如下项:

其他JavaScript文件:这包括.js文件和嵌入程序集的JavaScript。它不包括绝对路径,所以引用的文件必须是当前项目的一部分。

Web Service(.asmx)文件:这些也必须是当前项目的一部分,不支持Web Application项目中的Web Service文件。

包含JavaScript的页面:可以用这种方式引用一个页面。如果引用了页面,就不能引用其他项。

下面是reference指令的一些例子,它们必须放在JavaScript文件中其他代码的前面。

JavaScript

      // JavaScript file in current folder
      /// <reference path="Toolbox.js" />
      // JavaScript file in parent folder
      /// <reference path="../Toolbox.js" />
      // JavaScript file in a path relative to the root folder of the site
      /// <reference path="~/Scripts/Toolbox.js" />
      // JavaScript file embedded in Assembly
      /// <reference name="Ajax.js" path="System.Web.Extensions, …" />
      // Web Service file
      /// <reference path="MyService.asmx" />
      // Standard Page
      /// <reference path="Default.aspx" />

reference指令的工作方式有几个限制:第一,引用当前项目外部的路径的reference指令会被忽略;第二,reference指令不会递归使用,所以,只有当前编辑的文件中的引用才有助于构建上下文。不使用上下文的其他文件中的reference指令。