Visual Studio - 用于javascript自定义对象的intellisense

时间:2013-05-23 08:53:06

标签: javascript .net visual-studio-2010 visual-studio intellisense

我创建了以下javascript对象:

var Content = Content || {};

// Constructor defines properties and inits object
Content.ProductManager = function () {
    // ...
};


Content.ProductManager.prototype = function () {

    // 
    // private members
    // 


    var setProductAsPreviewed = function (args) {
        // code omitted for brevity
        // ....
    };


    //
    // public members
    // 

    return {
        setProductAsPreviewed: setProductAsPreviewed
    };

} (); 

传递给setProductAsPreviewed的对象具有以下属性:

args = {
    productId: int,
    productName: string,
    updateDate: date,
    saveItems: bool
};

我想包含XML注释,以便我可以获得传递给函数setProductAsPreviewed的参数的intellisense:

var productManager = new window.Content.ProductManager();
// show intellisense when typing the following:
productManager.setProductAsPreviewed( 

This thread显示了如何为简单的args(stringint,...)执行此操作,但如何为复杂对象执行此操作?我正在使用Visual Studio 2010。

2 个答案:

答案 0 :(得分:21)

据我所知,如果将IntelliSense用作参数,则无法告诉IntelliSense泛型变量的字段和方法。

如果变量是一个数组,你可以这样定义:

function funcWithArrayArg(arrayArg) {
    /// <param name="arrayArg" type="Array" elementType="Number">An array of numbers</param>
}

在VS2012中你也可以注释对象,就像这样(你可以在用作对象构造函数的函数上注释,如下所示,但文档没有提到像这样的匿名对象):

var args = {
    /// <field type="Number">Product ID</field>
    productID: int
};

这两种方法都没有真正做到你想要的,因为第二种方法不会给你关于函数参数的智能感知,无论如何你都在使用VS2010。

我认为最好的办法是定义一个自定义对象作为参数对象,仅用于该函数,如果你想创建一个自定义对象作为参数,你可以在其他语言中使用它。智能感知。它可能看起来像这样:

function ProductPreviewArgs(productId, productName, updateDate, saveItems) {
    /// <summary>Creates an object for use as the sole argument to the setProductAsPreviewed function</summary>
    /// <param name="productId" type="Number" optional="false">The Product ID</param>
    /// <param name="productName" type="String" optional="false">The Product Name</param>
    /// <param name="updateDate" type="Date" optional="false">The date the product was last updated</param>
    /// <param name="saveItems" type="Boolean" optional="false">Specifies whether or not to save the items</param>
    /// <returns type="ProductPreviewArgs">An object intended for use as the sole argument to the setProductAsPreviewed function</returns>
    /// <field name="productId" type="Number">The Product ID</field>
    /// <field name="productName" type="String">The Product Name</field>
    /// <field name="updateDate" type="Date">The date the product was last updated</field>
    /// <field name="saveItems" type="Boolean">Specifies whether or not to save the items</field>
    this.productId = productId;
    this.productName = productName;
    this.updateDate = updateDate;
    this.saveItems = saveItems;
}

您可以在此处获得对象的智能感知(这将显示您放在returns元素中的内容):

setProductAsPreviewed(

如果您决定创建一个新对象,那么您将获得IntelliSense(在添加时将逐个显示每个参数的说明):

setProductAsPreviewed(new ProductPreviewArgs(

我不完全确定type元素上的returns属性是否真的会像那样工作,它在VS2012中是这样做的,而且正如你现在可能想到的那样,文档很烦人裸露在这个问题上;我现在没有VS2010的副本来测试任何一个。

答案 1 :(得分:6)

您可以创建一个单独的IntelliSense文件,看起来像这样

intellisense.annotate(Content, {
  'setProductAsPreviewed ': function() {
    /// <signature>
    ///   <summary>Summary<summary>
    ///   <param name="args" type="ComplexObject">some text here
    /// </signature>
   }
})

我相信这应该可以进行一些修改