12

次の 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
};

function に渡される引数のインテリセンスを取得できるように、XML コメントを含めたいと思いますsetProductAsPreviewed

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

このスレッドは、単純な引数 ( stringint、 ...) に対してそれを行う方法を示していますが、複雑なオブジェクトに対してそれを行う方法は? Visual Studio 2010 を使用しています。

4

2 に答える 2

21

私の知る限り、ジェネリック変数がパラメーターとして使用されている場合、どのフィールドとメソッドがジェネリック変数にあるかを 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
};

2番目のアプローチでは関数の引数に関するインテリセンスが得られず、とにかくVS2010を使用しているため、これらのアプローチはどちらも実際にはあなたが望むことをしません。

カスタムオブジェクトをその関数の引数オブ​​ジェクトとして使用するように定義するのが最善の策だと思います.Intellisenseを使用してカスタムオブジェクトをパラメーターとして作成したい場合、他の言語でこれを行う方法です. 次のようになります。

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 が表示されます (追加すると、各パラメーターの説明が 1 つずつ表示されます)。

setProductAsPreviewed(new ProductPreviewArgs(

type要素の属性が実際にそのように機能するかどうかは完全にreturnsはわかりませんが、VS2012 では機能します。ご想像のとおり、この件に関するドキュメントはうっとうしいほどむき出しです。現在、これをテストするためのVS2010のコピーがありません。

于 2013-05-30T15:09:55.483 に答える
6

次のような別の IntelliSense ファイルを作成できます。

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

私はこれがいくつかの変更で動作するはずだと信じています

于 2013-06-05T20:33:06.293 に答える