10

मैं निम्नलिखित जावास्क्रिप्ट वस्तु बनाया:दृश्य स्टूडियो - के लिए IntelliSense जावास्क्रिप्ट कस्टम वस्तु

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

मैं एक्सएमएल टिप्पणी तो मैं शामिल करना चाहते हैं कार्य setProductAsPreviewed:

var productManager = new window.Content.ProductManager(); 
// show intellisense when typing the following: 
productManager.setProductAsPreviewed( 
पर कार्य करने के लिए पारित तर्क के लिए इंटेलिजेंस प्राप्त कर सकते हैं

This thread दिखाता है कि सरल तर्कों के लिए इसे कैसे करें (string, int, ...), लेकिन जटिल वस्तु के लिए इसे कैसे करें? मैं विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं।

+0

अपने 'args' जेनरेट कर दिए वस्तु है, या तरह दिखता है वहाँ एक कस्टम फ़ंक्शन जो प्रकार को परिभाषित करता है? – Sean

+0

वे फ्लाई पर उत्पन्न होते हैं, जब मैं 'productManager.setProductAsPreviewed' फ़ंक्शन का आह्वान करता हूं।इंटेलिजेंस होने के लिए पहले वांछित गुणों के साथ किसी ऑब्जेक्ट को परिभाषित करना एक अच्छा विचार होगा? मैं इससे बचने की कोशिश कर रहा था, क्योंकि यह एकमात्र ऐसा स्थान है जहां मैं इस वस्तु का उपयोग करूंगा। –

+0

ने मेरी टिप्पणी को एक उत्तर में बदल दिया। मैं गलत हो सकता हूं हालांकि जेएस इंटेलिजेंस का मेरा अधिकांश ज्ञान वीएस2012 से आता है, इसलिए मैं इसे अन्य लोगों के विचार के लिए थोड़ी देर देता हूं =] – Sean

उत्तर

21

जहां तक ​​मुझे पता है, आप इंटेलिसेन्स को नहीं बता सकते हैं कि पैरामीटर के रूप में उपयोग किए जाने पर जेनेरिक चर पर कौन से फ़ील्ड और विधियां हैं।

तो चर एक सरणी था, आप इसे इस प्रकार निर्धारित कर सकते हैं:

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

इन तरीकों का न तो वास्तव में आप क्या चाहते हैं, के रूप में दूसरा दृष्टिकोण आप IntelliSense समारोह तर्क पर नहीं देना होगा करते हैं और आप उपयोग कर रहे वैसे भी वीएस -2010।

मुझे लगता है कि आपकी सबसे अच्छी शर्त एक कस्टम ऑब्जेक्ट को उस फ़ंक्शन के लिए तर्क ऑब्जेक्ट के रूप में उपयोग करने के लिए परिभाषित करना है, इसके बाद आप अन्य भाषाओं में ऐसा करेंगे यदि आप पैरामीटर के रूप में कस्टम ऑब्जेक्ट बनाना चाहते हैं इंटेलिजेंस के साथ।

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

आप वस्तु पर IntelliSense (जो कि तुम क्या returns तत्व में डाल दिया है दिखाएगा) मिलेगा यहाँ:: यह कुछ इस तरह लग सकता है

setProductAsPreviewed(

आप एक बनाने का फैसला करते हैं नई वस्तु, आप यहाँ IntelliSense मिलेगा (जो आप उन्हें जोड़ने के रूप में एक एक करके प्रत्येक पैरामीटर एक के लिए विवरण तुम्हें दिखाता हूँ):

setProductAsPreviewed(new ProductPreviewArgs(

मैं पूरी तरह यकीन नहीं है कि क्या 012,returns तत्व पर विशेषता वास्तव में इस तरह काम करेगी, यह वीएस2012 में है और जैसा कि आप अब तक उम्मीद कर सकते हैं, दस्तावेज़ इस विषय पर कष्टप्रद रूप से बेकार हैं; और मेरे पास इस पर किसी भी परीक्षण का परीक्षण करने के लिए वीएस -2010 की एक प्रति नहीं है।

+0

आपके प्रयास शॉन के लिए धन्यवाद, लेकिन इससे मदद नहीं मिलती है। मेरे पास सार्वजनिक कार्यों के साथ एक कस्टम ऑब्जेक्ट है, मुझे उनके लिए इंटेलिजेंस चाहिए। साथ ही, मैं कार्यों के हस्ताक्षर को बदलना नहीं चाहता, मैं एक तर्क वस्तु रखना चाहता हूं। –

+0

इस बारे में नहीं पता था कि आप एक विशिष्ट प्रकार की सरणी के पैरामीटर/रिटर्न निर्दिष्ट कर सकते हैं - इंटेलिसेंस शानदार है! – andrewb

6

आप एक अलग IntelliSense फ़ाइल बना सकते हैं, कि है इस

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

मेरा मानना ​​है कि यह कुछ संशोधन के साथ काम करना चाहिए

+0

क्या यह केवल वीएस2012 के लिए है? –

संबंधित मुद्दे