- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ZK6入门ZK-MVVM
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本身。
注意:模态窗口的显示或隐藏是通过判断message的值是否为空来控制的。(visible=@load(not empty vm.message))
ZK Binding Features(ZK
原创力文档


文档评论(0)