Windows 脚本部件  

<property> 元素

声明一个属性。

<property name="propertyName" [internalName="propertyVariable"] />

– 或者 –

<property name="propertyName">
   <get [internalName="getFunctionName"] />
   <put [internalName="putFunctionName"] />
</property>

propertyName
要说明的属性名称。除非指定了 internalName 属性,否则这个名称必须与将用来保存该属性值的全局变量的名称一致。
propertyVariable
(可选项) Scriptlet 文件<script> 元素中的全局变量的名称,该变量将用来保存 propertyName 的值。如果没有包括 internalName 属性,属性值将保存在与 propertyName 名称同名的变量中。如果指定 internalName 属性,则可以使用一个不同的名称来代表该属性及其相应的全局变量。
getFunctionName
(可选项) 用来读取属性值的过程名称。如果包括了 <get> 元素但没有包括 <put> 元素,该属性就是只读的。如果包括了 <get> 元素但没有指定 internalname 属性,那么用来读取属性值的方法的名称必须是该属性的名称加上 get_ 前缀(例如 get_lastname)。
putFunctionName
(可选项) 用来写入属性值的过程名称。如果包括了 <put> 元素但没有包括 <get> 元素,该属性就是只写的。如果包括了 <put> 元素但没有指定 internalname 属性,那么用来写入属性值的方法的名称必须是该属性的名称加上 put_ 前缀(例如, put_lastname)。
提示   在 XML,可以实现没有内容的元素 (如 <property> 元素),方法是用 /> 来结束元素。

说明

属性可以作为简单值来说明。在这种情况下,属性将作为脚本部件文件内的全局变量来处理。

也可以将属性作为过程(函数或子程序)来实现,这样可以计算属性的值,以及控制属性是否为只读、只写或是可读写的。在这种技术中,属性将在单独的 <script> 元素内作为过程(函数或子程序)实现。<property>元素将属性名称映射到用来实现该属性的过程。过程的名称必须与在 <property> 元素中指定的内部名称一致。

当调用 putFunctionName 时,该函数将传递一个参数,其中包含了用来设置给该属性的值。

除了以上所示的标准语法,您可以使用速记符号指定由子标记(child tags)添加的信息。例如,如果您想声明一个具有和属性相同名字的"get" 和 "put" 访问者属性,您可以使用以下语法:

<property name="myproperty" get put/>

它在功能上相当于:

<property name="myproperty">
   <get/>
   <put/>
</property>

如果您想明确地不以默认名称命名这些访问者,您可以使用以下语法:

<property name="myproperty" get="testget" put="testput"/>

要指定缺省属性,只需在 <property> 元素中包含 dispid="0" 这个属性。详细信息请参阅说明属性

示例

下面的脚本部件片段演示了四个属性 (sname、age、dateOfBirth 以及 mstatus) 的定义。sname 属性为一个简单值。age 属性是只读的,由 readAge 函数实现。dateOfBirth 属性是可读写的,由 readDOB 和 writeDOB 两个函数实现。最后, mstatus 属性由缺省函数 get_mstatus 以及 put_mstatus 实现。

注意   CDATA 项是必需的,以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性
<public>
   <property name="sname"/>
   <property name="age">
      <get internalName="readAge"/>
   </property>
   <property name="dateOfBirth">
      <get internalName="readDOB"/>
      <put internalName="writeDOB"/>
   </property>
   <property name="mstatus">
      <get/>
      <put/>
   </property>
</public>

<script language="VBScript">
<![CDATA[
Dim sname   ' 可读写的 sname 属性(没有函数)。
Dim gDOB   ' 用来保存出生日期的全局变量。
Dim gMStatus   ' 用来保存材料状态的全局变量。

Function readDOB()
   ' Gets value of dateOfBirth property.
   readDOB = gDOB
End Function

Function writeDOB(newDOB)
   ' 设置 dateOfBirth 属性的值。
   If isDate(gDOB) Then
      ' 错误检查。
      gDOB = newDOB
   End If
End Function

Function readAge()
   '计算只读 age 的属性。
   If isDate(gDOB) Then
      dobM = DatePart("m", gDOB)
      dobD = DatePart("d", gDOB)
      dobY = DatePart("yyyy", gDOB)
      todayY = DatePart("yyyy", Date)
      age = todayY - dobY

      ' 如果今年还没有过生日,则进行调整。
      bday = DateValue(dobM & "/" & dobD & "/" & todayY)
      If DateDiff("d", bday, DateValue(Date)) < 0 Then
         age = age - 1
      End If
      readAge = age
   End If
End Function
      
Function get_mstatus()
   ' 读取 mstatus 属性的值。
   get_mstatus = gMStatus
End Function

Function put_mstatus(s)
   ' 写入 mstatus 属性的值。
   If s = "M" Or s = "S" Then
      gMStatus = s
   Else
      gMStatus = "?"
   End If
End Function
]]>
</script>

请参阅

<event> 元素 | <method> 元素 | 说明事件 | 说明方法 | 说明属性