10

stworzyłem następujące JavaScript Object:Visual Studio - IntelliSense dla javascript niestandardowy obiekt

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

}(); 

Obiekt przekazany do setProductAsPreviewed ma następujące właściwości:

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

chcę zawierać komentarze XML więc można dostać intellisense dla argumentu przekazanego funkcjonować setProductAsPreviewed:

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

This thread pokazuje, jak to zrobić dla prostych argumentów (string, int, ...), ale jak to zrobić dla złożonego obiektu? Używam Visual Studio 2010.

+0

Czy Twój obiekt 'args' generowane na bieżąco, czy istnieje niestandardowa funkcja, która definiuje typ? – Sean

+0

Są generowane w locie, gdy wywołuję funkcję "productManager.setProductAsPreviewed".Czy dobrym pomysłem byłoby najpierw zdefiniowanie obiektu o pożądanych właściwościach w celu uzyskania intellisensu? Próbowałem tego uniknąć, ponieważ jest to jedyne miejsce, w którym użyję tego obiektu. –

+0

Zmieniono mój komentarz na odpowiedź. Może się mylę, ponieważ większość mojej wiedzy na temat JS intellisense pochodzi z VS2012, więc dałbym mu trochę czasu, aby inni ludzie mogli pomyśleć =] – Sean

Odpowiedz

21

O ile mi wiadomo, nie można powiedzieć, IntelliSense, jakie pola i metody są na zmiennej ogólnej, jeśli jest używany jako parametr.

Jeśli zmienna była tablicą, można określić ją tak:

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

W VS2012 można opisywanie przedmiotów, jak również, podobnie jak (można opisywanie pola na funkcje wykorzystywane jako konstruktorów obiektów, jak wykazać poniżej, ale docs powiedzieć nic o anonimowych obiektów takich jak ta):

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

Żadne z tych podejść naprawdę to, co chcesz, a drugie podejście nie daje intellisense na argumencie funkcji i używasz VS2010 w każdym razie.

Myślę, że najlepiej jest zdefiniować obiekt niestandardowy, który będzie używany jako obiekt argumentu tylko dla tej funkcji, po tym wszystkim jest tak, jak zrobiłbyś to w innych językach, jeśli chcesz utworzyć niestandardowy obiekt jako parametr z intellisense. Może to wyglądać mniej więcej tak:

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

dostaniemy intellisense na obiekcie (który pokaże, co trzeba umieścić w elemencie returns) tutaj:

setProductAsPreviewed(

Jeśli następnie zdecydować się na stworzenie nowy obiekt, co można uzyskać IntelliSense tutaj (który pokaże opisy każdego parametru, jeden po drugim, jak je dodać):

setProductAsPreviewed(new ProductPreviewArgs(

nie jestem do końca pewien, czy type atrybut na elemencie returns będzie działał w ten sposób, robi to w VS2012 i jak można się było spodziewać, do tej pory, dokumenty są denerwująco puste w tym temacie; i nie mam kopii VS2010, aby przetestować którykolwiek z tego na teraz.

+0

Dziękuję za wysiłek Seana, ale to nie pomaga. Mam niestandardowy obiekt z funkcjami publicznymi, potrzebuję dla nich intellisense. Ponadto nie chcę zmieniać podpisu funkcji, chcę zachować pojedynczy obiekt argumentu. –

+0

Nie wiedziałem o tym, że można określić parametr/zwrot tablicy określonego typu - Intellisense jest genialny! – andrewb

6

Można utworzyć osobny plik IntelliSense, który wygląda mniej więcej tak

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

Wierzę, że to powinno działać z pewnymi zmianami

+0

Czy jest to tylko dla VS2012? –

Powiązane problemy