英雄列表范例:新增英雄

这篇我要介绍如何实作新增一个英雄到列表中,为了简化情境,这功能只需要输入英雄的名字。
https://ithelp.ithome.com.tw/upload/images/20210925/20050621lQ6InEbCO0.jpg

首先要增加 UI 元件:<textbox><button>

<h:h3>复仇者英雄列表</h:h3>
<div style="margin: 5px 0">
    <textbox id="newNameBox" hflex="1" style="margin-right:10px"/>
    <button id="add" iconSclass="z-icon-plus"/>
</div>
  • 你可以在 style直接写 css 语法来覆写或调整元件的外观。
  • hflex 是代表 horizontal flexibility,用来控制怎麽分配同一层元件(或说兄弟元件)的宽度,以上面的例子就是 <textbox><button>。它的值并不代表长度单位,而是一个比例,因为 <button>并没指定 hflex 的值,因此 <textbox> 会占满除了 <button> 宽度以外的剩下的空间。(底层以 CSS flexbox 实作)。
  • ZK 内包 Font Awesome 4.7 图示,要填在 iconSclass 属性中,前缀要把 fa- 改成 z-icon,例如要使用 fa-plus,必须写 z-icon-plus。所有继承 LabelImageElement 的元件都支援这个属性。

实作新增英雄

我需要实现的是:当按钮点击,要把textbox 中的值(英雄名字)加到清单中。因此要做两件事:

  1. 注册按钮 onClick 倾听器
  2. 将输入的英雄名字加到清单中

倾听按钮 onClick 事件

因为我的控制器继承 SelectorComposer,我可以用 @Listen加上元件选择器语法(类似 CSS selector)来指定倾听事件的元件,语法规则如下:

@Listen([事件名称] = [元件 selector])

public class HeroController extends SelectorComposer {
...
    @Wire
    private Textbox newNameBox;

		@Listen("onClick = #add")
		public void add(){
		    heroList.add(HeroService.create(newNameBox.getValue()));
		    newNameBox.setValue("");
		}
  • 为了要取得使用者输入要用@Wire 取得页面上 textbox 的参照,因此要宣告变数 newNameBox,其名称要等同该元件 ID
  • 井字号是「元件 ID 选择器」,@Listen 那行的意义就是:倾听 ID是 add的元件所发出的 onClick 事件。对照前一节的 zul,你会发现我同样指定 button 的 ID 为 add。因此当有使用者点了该按钮,ZK 就会呼叫这个控制器的 add()
  • 取得使用者输入的方式很简单,就是呼叫该textbox 的 getter,如 newNameBox.getValue()
  • HeroService.create() 代表呼叫後端服务类别,会回传一个新的英雄物件拥有你传入的名字。
  • heroList.add():把新的英雄加入清单中,因为 ListModelList 扮演 Model 负责储存资料,当你呼叫任何更改内容的method,如 add(),内部会发出事件通知 Listbox,然後 Listbox 会绘制出新的英雄到浏览器上。当然,绘制的方式就是依照先前所定义的范本。
  • setValue(""):为了避免新增之後,前一个英雄的名字还在 textbox,我要清除它,方便可以立即输入下一个名字。设定输入元件点值就靠 setter,设成空字串就等於清除。

以上这段新增在zul 中的元件跟程序码搭配就完成了「新增英雄」的功能。


<<:  Day 9 k8s event收集-eventrouter

>>:  Day 9— 物品借用纪录系统 (1) 基础建构

笔记-Basics of Video

Types of Color Video Signals Component video 主要作为单...

Day 04-Terraform 也有 Backend?啥是 Terraform Backend 能吃吗?

Terraform 也有 Backend 之啥是 Terraform Backend 能吃吗? 课程...

day17 不懂kotlin flow资料流? 那喝杯进口奶茶吧

用过Rx或reactive stream的大大,应该会很好理解flow,从设计概念来讲,flow也属...

Day3.编译器运作流程介绍

编译器做了什麽 ? 我们知道使用机器指令撰写程序码是非常麻烦的事情,也会使开发程序的效率不高,编译器...

使用bot.py建立起你的第一个机器人

行前作业 注册帐号 需要有自己的服务器或是相应的权限 开始後续作业 搜寻discord develo...