首先,我不是 Javascript 程序员,但我确实有 JS 程序员向我报告。
我正在尝试通过让添加到 VS2008 的 Javascript Intellisense 功能工作来改进我们的工作方式。
具体来说,现在我正试图弄清楚如何将强类型添加到复杂的数据结构中。
到目前为止,我想出了这个:
GetDateTimeResponse = function GetDateTimeResponse() {
/// <summary>The return value from GetDateTime</summary>
/// <field name="CurrentDateTime" type="String" mayBeNull="false">The current date time, ISO8601 format UTC</field>
/// <field name="ListOfStrings" type="Array" arrayType="String" mayBeNull="true">An array of strings</field>
/// <field name="SubTypeList" type="Array">An array of complex types</field>
/// <field name="AnInteger" type="Number" integer="true">An integer</field>
/// <field name="AFloat" type="Number">A float</field>
};
GetDateTimeResponse.prototype = {
CurrentDateTime: "",
ListOfStrings: new Array(),
SubTypeList: new Array(),
AnInteger: 0,
AFloat: 0.0
};
这是一个实验性的“类”,用于处理来自测试 SOAP/JSON 服务的响应。
WSDL 引用了一个模式,该模式包含(应该是)匹配类型:
<xs:element name="GetDateTimeResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="CurrentDateTime" type="xs:dateTime"/>
<xs:element name="ListOfStrings" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="SubTypeList" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="IDFIeld" type="xs:int"/>
<xs:element name="DisplayName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AnInteger" type="xs:int"/>
<xs:element name="AFloat" type="xs:float"/>
</xs:sequence>
</xs:complexType>
</xs:element>
我们使用 jQuery 与服务进行通信,我想编写辅助方法来获取和返回该“类型”的对象。
它有点工作。如果我创建 js 文件,/// <reference/>
则包含该定义的文件然后此代码在一定程度上起作用:
var bob = new GetDateTimeResponse();
bob.CurrentDateTime = "";
现在,我得到类名GetDateTimeResponse
(CurrentDateTime
但我没有得到任何类型、mayBeNull、arrayType 和整数属性。如果我向构造函数添加一个参数,并使用<param>
注释、名称、类型和描述工作。但是整数、mayBeNull 等仍然什么都不做。
有任何想法吗?
这甚至在VS2008中有效吗?
无论如何命名对象,数字或字符串以外的“类型”(我想让智能感知做类型数组)
最终,这一切都是为了我们可以为具有工作智能感知的 Web 服务生成一个 javascript 客户端。
我对此的参考是:
http://weblogs.asp.net/bleroy/archive/2007/04/23/the-format-for-javascript-doc-comments.aspx