没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
ZK MVVM 模式简介
ZK6.0 之前的版本都是采用 MVP(Model-View-Presenter)设计模式。从 ZK6.0 开始就有了很
大的不同,采用 MVVM(Model-View-ViewModel)设计模式。
下面通过一个例子来看一下它们之前的不同:
用例:实现页面上点击一个按钮,然后呈现 Model 层返回的消息”Hello World”
MVP 实现:
作用过程:
① 用户在屏幕上点击按钮(一个动作 action),一个通信事件就被触发。
② 后台的事件监听器(event listener)处理这个事件(event)。
③ 访问数据库(access data)并返回
④ 用户界面元素(UI element)被改变,相应的把视觉反馈(visual feedback)呈现给用户
MVVM 实现:
作用过程:
① 用户在屏幕上点击按钮(action)触发一个事件(event)
② 绑定器(Binder)感知到相应的事件(corresponding event)被触发
③ 绑定器(Binder)在 ViewModel 中找到相应的动作逻辑(action logic)并调用它
④ 动作逻辑(action logic)从 Model 层访问数据库(access data),并更新 ViewModel 中相应的
属性
⑤ViewModel 通知(notify chnage)绑定器(Binder) 一些属性被改变
⑥ 每当有属性被改变,绑定器(Binder)就会从 ViewModel 中加载数据(load data)
⑦ 绑定器(Binder)改变相应的 UI 组件来给用户呈现视觉反馈(visual feedback)
很明显,UI 设计者必须至少告诉绑定器(Binder)以下几点:
◆ 用到了哪些 UI 事件(UI event)来触发哪些动作逻辑(action logic)。(这样 Binder 才知道
调用什么方法)
◆ 用到了哪些 UI 属性(UI attribute)来显示哪些数据。(这样 Binder 才知道加载什么数据,
更新什么数据)
◆ 用到的哪些 UI 属性(UI attribute)是用来输入到数据库的。(这样 Binder 才知道要保存
哪些属性)
在 ZK 绑定(ZK Bind)中用到了 ZK 注解(annotation)来做这些工作:
通过程序流程运行的过程:
① 当用户按下了”Show”按钮,onClick event 就被触发到了 Binder
②ZK Binder 通过指定的 ZK 注解 @command('showHello')在 ViewModel 中找到命令的名字
(command name)为 showHello 的方法。
③Binder 在 HelloViewModel.java 中调用 showHello()方法,并且改变 message 的属性值
为”Hello World”。
注意:@command('showHello')是告诉 Binder showHello 这个方法是一个 command 方法,而
@NotifyChange("message")则是告诉 Binder 如果@command('showHello')中的 showHello()方
法被调用,那么 HelloViewModel 中的属性 message 将会被改变。也就是说当这个方法被调
用后,页面上(客户端)可以感知到属性 message 的改变。
④Binder 找到 HelloViewModel.java 中与组件标签(component label)相关联的属性 message 的
属性值(这是由于页面上 message 被指定了 ZK 注解@load(vm.message)的缘故)。因此它
通过调用 HelloWorldModel.java 的 message 属性的 getMessage()方法从 vm.message 中加载数
据,并改变标签 label 的属性值。最后”Hello World!”就呈现到了客户端用户。
有时用户看了上面的页面之后,说想通过弹出窗(pop window)来显示信息 message。这样的
改变其实很容易,将信息放到一个模态窗口中:
MVP 实现:
对于 MVP 设计模式而言,view 层的 zul 页面修改了之后,Presenter 层的 java 文件必须完全
被重写,这时需要注入弹出窗口 popwin、弹出窗口中的标签 popwin$lbl
MVVM 实现:
当客户改变 View 层的需求的时候,MVVM 设计模式的优势就体现出来了。UI 设计者可以
独立的处理这些改变,而不用去改变 HelloViewModel.java 文件,因为客户需要的是改变
message 的呈现方式而不是 message 本身。
剩余17页未读,继续阅读
资源评论
灵动领域
- 粉丝: 2
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 伯克利大学机器学习-12Time series&sequential hypothesis testing&anomaly de
- 上市公司企业网络舆论关注数据集
- 伯克利大学机器学习-11Bootstrap&cross-validation&ROC plots Michael Jordan
- java项目工时统计成本核算管理系统源码数据库 MySQL源码类型 WebForm
- arnabdhar YOLOv8-Face-Detection Dateset Source
- CSnet-tls1.3-packet数据集
- 创建vue+electron项目流程
- Python-基于Pygame的贪吃蛇
- C#ASP.NET高校移动考勤webapp源码数据库 SQL2008源码类型 WebForm
- (2000-2023年)中国各、省、市、县、乡镇基尼系数数据(全新整理)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功