在服务器的控制器(ZK composer)载入资料後,要让它跟 zul 上写的元件关联,才能实际控制 zul上的元件,於是我在最上层的元件 <div>
上的 apply
写上完整 class 名称:
<div width="20%" apply="quickstart.hero.HeroController" style="margin: 0 auto">
<h:h3>复仇者英雄列表</h:h3>
<listbox id="heroBox" rows="5" emptyMessage="无资料">
...
</listbox>
当我想控制 <div>
跟其下子元件时,我就必须将控制器关联到该元件。
控制器的生命周期是由 ZK 决定,因此你无需写程序去产生该物件。当一个浏览器访问这个 zul 时,ZK 就会新建一个控制器物件,并呼叫对应的生命周期方法,如 doAfterCompose()
,也会剖析 zul 档将对应的元件生成,并绑定到我所指定的控制器上去。
要用 Listbox 显示资料前先了解 ZK 针对资料元件(例如Listbox, Grid, Tree)及一些支援 model
属性的元件(如 Tabbox, Selectbox, Searchbox等)的设计架构都是采用「资料模型驱动绘制」。元件(Listbox)、zul、资料模型(ListModel),3者之间形成 MVC pattern。
以 Listbox
为例,开发者把资料模型 (ListModelList
) 塞给元件 (Listbox
),元件根据模板或绘制器 (<template>
, ListItemRender
) 生成其对应的子元件 (Listitem
)。开发者需透过操控资料模型(ListModel)的内容来控制子元件而不是直接生成/消灭子元件。
add()
, remove()
, clear()
被呼叫时setModel()
只是将资料塞给 Listbox
,预设 Listbox
会呼叫 toString()
把每个 Hero
绘制出来,但这通常不是我们想要的。因此我要定义一个范本来决定怎麽绘制每一个 Hero 物件,语法如下:
<listbox id="heroBox" rows="5" emptyMessage="无资料" >
<listhead>
<listheader width="50px"/>
<listheader />
</listhead>
<template name="model">
<listitem>
<listcell label="${forEachStatus.index}"/>
<listcell label="${each.name}"/>
</listitem>
</template>
</listbox>
<listheader>
控制栏位宽度<template>
用来定义范本,name
的值必须是 model
,代表是给 model
用的范本。${each}
是 ZK 预设定义的隐含变数,代表 model 中的每个物件,在我们的例子中是 Hero
,用 dot notation 来存取 Java bean 物件上的属性如 ${each.name}
${forEachStatus.index}
也是隐含变数,用来存取model索引值,从0 开始
>>: 前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day23 上传会员照片
第十二天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,知...
前一篇我们成功下载了postman并且成功用POST把资料传到server去了 今天我们就要来好好认...
我们今天来针对API做更进一步的测试, 假如我们今天要取得一个使用者资料, 这个使用者的资料有 代号...
沃呜!铁人倒数3天了,我们离完赛就差一颠点啦,我们今天来讲讲components吧~继续gogogo...