2011-03-29 31 views
2
/// <reference path="jquery-1.5.vsdoc.js" /> 
// IntelliSense works here. 

function ($, window, document, undefined) { /// <param name="$" type="jQuery" /> 
    // IntelliSense does not work here. 

}(jQuery, this, document); 

有没有Visual Studio 2008的解决方法? SP1修补程序已被应用,并且是智能感知在无冲突包装之外工作的原因,但在内部没有bueno。有人说要添加param注释,但是,唉,这对我无效。VSDoc IntelliSense为什么不在jQuery无冲突包装器中工作?

+0

问题标题不是标签,你应该写一个标题描述你的实际问题。 – Brandon 2011-03-29 16:44:54

+0

@斯科特,这并不意味着给你带来巨大刺激,只是一个有用的建议。描述性标题可以帮助您的问题得到更多的关注,而非描述性标题可能会忽略您的问题。如果你不同意,你总是可以恢复它。 – Brandon 2011-03-29 17:12:36

+0

[Intellisense for special javascript function]可能重复(http://stackoverflow.com/questions/5459111/intellisense-for-special-javascript-function) – 2011-03-29 17:28:52

回答

3

这是因为函数的定义并不知道jQuery意味着美元在里面。借此,例如:

var wrapper = function($, window, document, undefined) { 
    // this function doesn't know what dollar is 
}; 

// it could be called like this: 
wrapper(jQuery, window, document, undefined); 

// or like this: 
wrapper(1, 2, 3, 4); 

你的功能,可以不知道你是在传递什么样的定义,它是由你的函数去弄清楚,并确保你的论点是有效的。

函数的定义和函数的执行是两个独立的东西。函数定义中的函数参数不会获得智能感知。

+0

我的意思是,我知道该函数不知道传入的内容,但这就是param注释应该做的事情。它明确地给$参数一个jQuery类型。 – 2011-03-29 17:40:03

+1

另一个让我烦恼的东西就是你的例子。我的帖子里有一个自我执行的功能。它通过(jQuery,this,document)自行调用。即使你没有在你的例子中使用自动执行功能,我想你在回答中说的话仍然适用于自动执行功能?如果是这样的话,我仍然会质疑为什么/// 的显式参数/类型定义不起作用。 – 2011-03-29 17:56:34

+1

请记住,您的参数正在尝试确定参数的类型,它的类型是jQuery,而不是jQuery本身。这也是在执行上下文中没有param定义的JavaScript intelliense的已知限制。 – Eli 2011-03-29 18:06:45

1

这适用于Visual Studio 2010中的NuGet包(当前是1.6.1)中包含的jQuery IntelliSense文档。有一个黑客攻击,但这是一个jQuery插件示例,带有完整的jQuery实例IntelliSense。

/// <reference path="/Scripts/jquery-1.6.1.js" /> 
(function ($) { 
    /// <param name="$" type="jQuery"> 
    ///  Pass me jQuery 
    /// </param> 

    // IntelliSense works here. 
    $(".intellisense_work_here").add(".test", "<strong>it works<strong>"); 

    // Setting this locally enables IntelliSense to work in the .each below. 
    var $ = $; 

    $.fn.makeThingsAwesomePlugin = function (options) { 

     var defaults = { 
      awesomeness: "really_awesome" 
     }; 
     var options = $.extend(defaults, options); 

     return this.each(function() { 

      // intellisense work here  
      $(".someting_lame").addClass(options.awesomeness); 
     }); 
    }; 
})(jQuery); 
+0

首先,nuGet是什么?其次,我们仍在使用VS2008,但尚未完全升级到VS2010。 – 2011-05-20 17:23:41

+0

这是NuGet:http://www.nuget.org/据说它已经更新了jQuery文档,但我不确定它是否对此问题有任何影响。我没有VS2008了,但也许你可以尝试以上,看看它是否有效?它也可能在VS2008中工作。 – 2011-05-20 17:31:08

+0

我刚刚重新看了你的例子,我想你已经尝试了一些非常类似的东西。我所能说的是,我的组合代码上面的作品,但我不知道它的最重要的因素:vs2010,更新的jquery文档等。 – 2011-05-20 17:41:13