2009-04-17 25 views
3

我已经能够获取JavaScript智能感知这样定义的“类”的原型正常工作:你如何获得VS 2008 Javascript智能感知工作复杂的原型?

function GetCustomerList() 
{ 
} 

GetCustomerList.prototype = 
{ 
    HEADER: { 
     RETURN_CODE: 0, 
     RETURN_MESSAGE: "", 
     } 
    , 
    NUM_RECORDS: 0, 
    START_RECORD: 0, 
    END_RECORD: 0 
}; 

我可以输入类似:

var req = new GetCustomerList(); 
req.HEADER.RETURN_CODE = 100; 

和Visual Studio的智能感知知道的HEADER属性以及名为“RETURN_CODE”和“RETURN_MESSAGE”的属性。我可以这样做:

req.NUM_RECORDS = 50; 

随着intellisense完美工作。

因此intellisense适用于复杂的嵌套类型 - 很好。然而,是否有可能通过一系列复杂类型获得智能感知?

实施例:

function Customer() 

Customer.prototype = { 

    NAME: "", 
    ADDRESS: "", 
    ID: 0 
}; 

function GetCustomerList() 
{ 
} 

GetCustomerList.prototype = 
{ 
    HEADER: { 
     RETURN_CODE: 0, 
     RETURN_MESSAGE: "", 
     } 
    , 
    NUM_RECORDS: 0, 
    START_RECORD: 0, 
    END_RECORD: 0, 
    CUSTOMERS: [ new CUSTOMER() ] 
}; 

我在哪里具有类型“客户”我还定义一个原型的阵列。我希望能够输入如下内容:

req.CUSTOMER[ 0 ].NAME 

并且有intellisense提示我“NAME”是此数组可用的属性。

这可能吗?

+0

编辑问题而不是发布重复。 – Guffa 2009-04-17 17:58:41

+0

标记删除副本。这个问题有更多的细节,应该留下来。请将取消标记为'完全重复' – Adam 2009-04-17 18:20:34

+0

请查看我的更新回答 – 2009-04-23 18:16:51

回答

3

UPDATE:

正如你已经注意到了,智能感知适用于您的复杂类型就好了,但在阵不起作用。即使你创建了一个像String这样的内部类型的数组,它仍然不起作用。

我已经彻底研究了这个话题,理论上这应该是可能的,但事实并非如此。
作为测试,创建的JavaScript文件名它“customers.js” 和包括如下:

function Customer() { 
    /// <summary>This is my custom intellisense for the Customer type</summary> 
    ///<field name="NAME" type="String">The Customer's name</field> 
    ///<field name="ADDRESS" type="String">The customer's address</field> 
    ///<field name="ID" type="String">The ID number</field> 
} 
Customer.prototype = { 
    NAME: "", 
    ADDRESS: "", 
    ID: 0 
}; 

function CustomerList() { 
    /// <summary>The List of Customers</summary> 
    ///<field name="HEADER" type="String">The header</field> 
    ///<field name="CUSTOMERS" type="Array" elementType="Customer" >The list of customers in an Array</field> 
} 

CustomerList.prototype = 
{ 
    HEADER: { 
     RETURN_CODE: 0, 
     RETURN_MESSAGE: "" 
    }, 
    NUM_RECORDS: 0, 
    START_RECORD: 0, 
    END_RECORD: 0, 
    CUSTOMERS: [new Customer()] 
}; 

然后引用该文件内<script src="customers.js"/>

/// <reference path="customer.js" />内的另一个JS文件。

看看intellisense如何正确显示摘要,但是当涉及到数组时,什么都没有。

var custList = new CustomerList(); 

custList.CUSTOMERS // intellisense 
custList.CUSTOMERS[0] // no intellisense as you already know 
0

有没有办法让这个工作在VS2008。它将在VS的下一个版本中工作。

0

虽然VS不支持它,但您可能需要考虑以下解决方法。

我改变了示例脚本:

function Customer(obj) { 
    /// <summary>This is my custom intellisense for the Customer type</summary> 
    ///<field name="NAME" type="String">The Customer's name</field> 
    ///<field name="ADDRESS" type="String">The customer's address</field> 
    ///<field name="ID" type="String">The ID number</field> 
    if (obj) return obj; 
} 

Customer.prototype = { 
    NAME: '', 
    ADDRESS: '', 
    ID: 0 
}; 

function CustomerList() { 
    /// <summary>The List of Customers</summary> 
    ///<field name="HEADER" type="String">The header</field> 
    ///<field name="CUSTOMERS" type="Array" elementType="Customer" >The list of customers in an Array</field> 
} 

CustomerList.prototype = 
{ 
    HEADER: { 
     RETURN_CODE: 0, 
     RETURN_MESSAGE: '' 
    }, 
    CUSTOMERS: [] 
}; 

(注意,在构造函数中的变化 - 不知道有关智能感知的XML注释)。

然后你就可以像这样引用它(与智能感知):

var list = new CustomerList(); 

var cust = new Customer(); 
cust.NAME = 'john'; 
list.CUSTOMERS.push(cust); 

var cust1 = new Customer(list.CUSTOMERS[0]); 
alert(cust1.NAME); 

var cust2 = new Customer({ NAME: 'Mark' }); 
alert(cust2.NAME); 

对这个论点是,你需要在构造函数中的参数。

相关问题