Почему VSDoc IntelliSense не работает внутри бесконтактной оболочки jQuery?
/// <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 было применено и является причиной, по которой IntelliSense работает вне оболочки без конфликтов, а внутри - без bueno. Некоторые сказали, чтобы добавить param
аннотации, но, увы, это не работает и для меня.
2 ответа
Это потому, что определение функции не знает, что 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);
Ваша функция не может знать определение того, что вы передаете. Ваша функция должна выяснить это и убедиться, что ваши аргументы верны.
Определение функции и ее выполнение - это две разные вещи. Вы не получите intellisense для аргументов функции внутри определения функции.
Это работает для меня в Visual Studio 2010 с документацией jQuery IntelliSense, включенной в пакет NuGet (в настоящее время 1.6.1). Есть один хак, но это пример плагина jQuery с полным IntelliSense экземпляра jQuery.
/// <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);