树控件

组件: treetreechildrentreeitemtreerowtreecelltreecolstreecol

tree包含了两部分:一套专栏 (column),及树体(tree body)。 专栏由若干treecol组件定义,一个对应一个专栏。每个专栏都会作为页眉(header)出现在树顶。第二部分,树体,包含了出现在树中的数据,由treechildren组件创建。

一个数控件的例子如下:

<tree id="tree" rows="5">
   <treecols>
      <treecol label="Name"/>
      <treecol label="Description"/>
   </treecols>
   <treechildren>
      <treeitem>
         <treerow>
            <treecell label="Item 1"/>
            <treecell label="Item 1 description"/>
         </treerow>
      </treeitem>
      <treeitem>
         <treerow>
            <treecell label="Item 2"/>
            <treecell label="Item 2 description"/>
         </treerow>
         <treechildren>
            <treeitem>
               <treerow>
                  <treecell label="Item 2.1"/>
               </treerow>
               <treechildren>
                  <treeitem>
                   <treerow>
                          <treecell label="Item 2.1.1"/>
                   </treerow>
                  </treeitem>
                  <treeitem>
                   <treerow>
                          <treecell label="Item 2.1.2"/>
                   </treerow>
                  </treeitem>
               </treechildren>
            </treeitem>
            <treeitem>
               <treerow>
                  <treecell label="Item 2.2"/>
                  <treecell label="Item 2.2 is something who cares"/>
               </treerow>
            </treeitem>
         </treechildren>
      </treeitem>
      <treeitem label="Item 3"/>
   </treechildren>
</tree>

无鼠标输入tree

open属性和onOpen事件

每一个tree项都有一个open属性来控制是否显示其子项目。默认值为true。通过将此属性设置为false,你可以控制tree的哪部分不可见。

<treeitem open="false"> 

当用户点击+/-按钮时,他会打开tree项并使其子项目可见。onOpen事件会被发送至服务器通知应用程序。

对于更复杂的应用程序,你可以延迟tree项的创建或动态操作tree项的内容,直到接收了onOpen事件。参考ZK用户标记语言一章中随机存取一节获取细节。

多选

当用户点击一个tree项时,整个项目会被选中且onSelect事件会被送回至服务器通知应用程序。通过将multiple属性设置为true,你可以控制tree控件是否允许多选。默认值为false。

分页

pageSize属性控制一次显示的tree项目的个数。默认为10。也就是在客户端每一层最多显示10个tree项目,如右图所示。

用户可以通过点击来显示更多的tree项目(即加大pageSize),或点击来上下滚动。

若你想显示所有的tree项目,只需简单的将pageSize设为-1。但是,由于浏览器处理含有大量项目的tree时是非常慢的,所以若tree控件比较大的话不推荐这样做。

除了tree控件的pageSize属性,你可以通过每个treechildren相应的pageSize属性改变每个treechildren实例的页大小。

onPagingonPageSize事件

当用户点击来上下滚动某一页时,onPaging事件会协同 org.zkoss.zul.event.PagingEvent实例被发出。类似的,当用户点击时,onPageSize事件会协同org.zkoss.zul.event.PageSize实例被发出。

特殊属性

rows属性

rows属性控制多少行可见。通过将其设置为zero,tree控件会改变其自身大小来容纳近可能多的项目。

checkmark属性

checkmark属性控制是否在每个tree项的前面显示一个复选框或一个单选按钮。

vflex属性

vflex属性控制是否在垂直方向增长或缩小以适合指定空间。即所谓的垂直柔性(vertical flexibility)。例如,如果tree太大以至于不适合浏览器窗口,此属性会缩小tree的高度以控制整个tree在浏览器内可见。

若指定了rows属性则此属性会被忽略。

maxlength属性

maxlength属性定义了浏览器端可见字符的最大允许字节数。通过设置这个属性,你可以将tree变窄。

可变列宽

就像columns,你可以将treecolssizable属性设置为true来允许用户改变tree的列宽。类似的,当用户改变宽度时onColSize事件被发出。

Tree控件的打开时创建

如下所述,你可以监听onOpen事件,然后加载一个tree项目的子组件。类似的,你也可以groupbox为这样做。

<tree width="200px">
   <treecols>
      <treecol label="Subject"/>
      <treecol label="From"/>
   </treecols>
   <treechildren>
      <treeitem open="false" onOpen="load()">
         <treerow>
            <treecell label="Intel Snares XML"/>
            <treecell label="David Needle"/>
         </treerow>
         <treechildren/>
      </treeitem>
   </treechildren>
   <zscript>
   void load() {
      Treechildren tc = self.getTreechildren();
      if (tc.getChildren().isEmpty()) {
         Treeitem ti = new Treeitem();
         ti.setLabel("New added");
         ti.setParent(tc);
      }
   }
   </zscript>
</tree>