Почему VSDoc IntelliSense не работает внутри бесконтактной оболочки jQuery? - PullRequest
2 голосов
/ 29 марта 2011
/// <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 ]

3 голосов
/ 29 марта 2011

Это потому, что определение функции не знает, что 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 для аргументов функции внутри определения функции.

1 голос
/ 20 мая 2011

Это работает для меня в 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);
...