组件克隆

所有的组件都是可克隆的。换言之,它们都实现了java.lang.Cloneable接口。因此,复制组件是很简单的,如下。

<vbox id="vb">
   <listbox id="src" multiple="true" width="200px">
      <listhead>
         <listheader label="Population"/>
         <listheader align="right" label="%"/>
      </listhead>
      <listitem value="A">
         <listcell label="A. Graduate"/>
         <listcell label="20%"/>
      </listitem>
      <listitem value="B">
         <listcell label="B. College"/>
         <listcell label="23%"/>
      </listitem>
      <listitem value="C">
         <listcell label="C. High School"/>
         <listcell label="40%"/>
      </listitem>
   </listbox>
   <zscript>
   int cnt = 0;
   </zscript>
   <button label="Clone">
      <attribute name="onClick">
      Listbox l = src.clone();
      l.setId("dst" + ++cnt);
      vb.insertBefore(l, self);
      </attribute>
   </button>
</vbox>

  1. 一旦组件被克隆了,所有它的子组件也都会被克隆(all its children and descendants)。

  2. 被克隆的组件并不属于任何页面和父组件。换言之,src.clone().getParent()会返回null。

  3. ID并未改变,若你想将被克隆的组件添加回相同的ID空间,要记住更改ID。