【问题标题】:Intellisense support in Visual Studio 2008/2010 for jQuery closures {Visual Studio 2008/2010 中对 jQuery 闭包的 Intellisense 支持 {
【发布时间】:2010-12-27 03:45:54
【问题描述】:

我正在尝试让 Intellisense 正确工作以完成关闭。作为插件作者,我总是使用闭包来为我的插件代码创建一个隔离的环境:

(function($) {
  // code here
})(jQuery);

但是这里的问题是 Intellisense 没有发现 jQuery 在函数的执行中被传递。在上面的代码中添加 $ = jQuery 可以解决问题,但这只是执行不佳,恕我直言。

这里有没有人在不使用嵌入式 ASP 服务器标签的情况下完成这项工作(这是一个独立的 JS 文件)?除了一些奇怪的/// <option .../>-like 解决方案之外,最好不包括修改现有代码?

【问题讨论】:

    标签: javascript jquery visual-studio intellisense closures


    【解决方案1】:

    在您的帖子或 cmets 中并不清楚,但在 .js 文件的顶部,您是否添加了:
    /// <reference path="jquery.vsdoc.js" />
    到文件的顶部?

    ScottGu's blog 在外部库(非 jQuery 特定)中提供了更多关于智能感知的信息。

    另外,还有一个可能的解决方案,这就是你提到的$=jQuery吗?:

    (function($) {  // private closure;  <% /*debug*/ if (false) { %> 
        $ = jQuery;
        // <% } /*end debug*/ %>
        $(function() {
            // do stuff
        });
    })(jQuery);
    

    在这里找到:http://blog.jeroenvanwarmerdam.nl/post/IntelliSense-VS08-within-private-closure.aspx

    【讨论】:

    • 是的,我已经添加了引用,但它不适用于解决这个特定问题(jQuery 被很好地引用,但是带有闭包的引用不起作用)。这正是我试图不使用的条件服务器端语句的类型,因为我使用的是静态 Javascript 文件,而不是带有 ASPX/ASCX 页面的代码。
    • 看来这种特殊情况是 Intellisense 引擎本身的限制。它不会识别该函数是使用作为参数传入的 jQuery 执行的。然而,这个问题对于静态的 Javascript 文件是无法解决的,而只能是处理过的文件,例如 ASPX 和 ASCX。
    【解决方案2】:

    如果您正在为您的 jQuery 插件开发 IDE 寻找 Visual Studio 2010,那么您做出了正确的选择。以下是设置的详细信息:

    1. 将 jquery 和相应的 jquery.vsdoc 下载到项目的同一目录中。您可以从http://www.asp.net/ajaxlibrary/cdn.ashx 下载最新版本的 jQuery 文件。以下是来自上述 CDN 的最新 jQuery 链接的链接:

      • http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.js
      • http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js
      • http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1-vsdoc.js

      在我的开发环境中我使用了未压缩的jquery文件重命名为jquery.js (去掉文件名中的版本信息[-1.7.1],记得把vsdoc文件名中的版本信息也去掉)

    2. 创建您的插件文件,第一行包含该行

      /// <reference path="/path/to/jquery.js">
      
    3. 使用闭包创建插件代码。这是一个插件的完整骨架:

      /// <reference path="jquery.js" />
      
      (function ($) {
          /// <param name="$" type="jQuery" />
          jQuery.fn.gallery = function () {
              return this.each(function () {
              // your code here
              });
          };
      })(jQuery);
      
    4. 记得使用/// &lt;param name="$" type="jQuery" /&gt; 作为插件关闭的第一行,正如我在上面的代码中演示的那样。这一切都适用于 Visual Studio 2010 SP1。

    访问My jQuery Plugin SiteBlog

    【讨论】:

    • 第 3 步简直是魔法!谢谢你分享这个。使用 Visual Studio 2012 beta 非常适合我。
    【解决方案3】:

    但在安装修补程序之前,请确保您的系统中已安装 SP1。

    【讨论】:

    • SP1 之前安装过。就像我说的,智能感知有效,但不适用于这种特定情况。
    【解决方案4】:

    我很惊讶这在 VS2010 中不起作用(我认为您无法使其在 VS2008 中起作用)。

    您可以尝试在开始的闭包中添加一个 xml 文档注释来定义参数类型。像这样的:

    ///

    (我不知道 jquery 对象的类名是什么——或者是否有可用的类名)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多