Javascript Intellisense没有显示所有内容

Rob*_*nik 5 javascript namespaces visual-studio-2008 javascript-intellisense

需要头脑风暴.我有一个Javascript库(jQuery,ExtJS等)的问题,它们与Visual Studio 2008中内置的Javascript Intellisense一起似乎不能很好地运行.它们提供了intellisense无法理解的某些实用程序辅助函数.

即.ExtJS代码

// convenience function to create namespace object placeholders
Ext.namespace("Root.Sub.Subsub");
Run Code Online (Sandbox Code Playgroud)

或jQuery

// doing the same thing in jQuery
$.extend(window, {
   Root: {
      Sub: {
         Subsub: {}
      } 
   },
});
Run Code Online (Sandbox Code Playgroud)

或者甚至(我认为你应该维护这段代码)

$.extend(window, { Root: {}});
$.extend(Root, { Sub: {}});
$.extend(Root.Sub, { Subsub: {}});
Run Code Online (Sandbox Code Playgroud)

这些调用的最终结果基本相同.他们都不会Root在Visual Studio 2008 中使Javascript Intellisense看到名称空间.如果我们知道intellisense如何工作,我们可能能够克服这种情况.

是否有可能说服 Intellisense显示/识别这些命名空间,而无需直接编写对象,如:

Root = {
   Sub: {
      Subsub: {}
   }
};
Run Code Online (Sandbox Code Playgroud)

我承认第一个jQuery调用与此非常相似,但最好使用扩展功能来防止删除/覆盖现有的功能/命名空间.

我们应该如何使用这些实用功能来使Intellisense工作?
任何能够解释这一点的头脑风暴的答案都值得欢迎吗?

编辑

我发现如果在外部定义(即在不同的脚本文件中)并且您对该文件的引用如下所示,则会显示使用实用程序函数创建的名称空间:

/// <reference path="different.script.file.js" />
Run Code Online (Sandbox Code Playgroud)

在这种情况下,一切都很好.但是如果你在同一个文件中调用实用程序函数,它们就不会列在intellisense下拉列表中.

Rob*_*nik 0

解决方法

如果您在不同的脚本文件中使用这些实用方法并在您想要使用这些命名空间的脚本文件中引用它,那么这些实用方法实际上是有效的。

File1.js(假设我们有一个注册新命名空间的自定义 jquery 扩展 $.ns())

$.ns("Project.Controls", "Project.Pages", "Project.General.Utilities");
...
Run Code Online (Sandbox Code Playgroud)

文件2.js

/// <reference path="File1.js" />

// use custom namespaces
Project.Controls.InfoWindow = function(){
    ...
};
Run Code Online (Sandbox Code Playgroud)

在 File2.js 中,我们将为自定义命名空间提供完整的智能感知支持。

退税

我们必须在其他地方创建名称空间,因为我似乎无法使其在同一个脚本文件中工作。