mvvm 耗时加载进度条

先前的文章简要介绍了RIA框架ZK,以及其CSS Selector启发的控制器机制如何通过使在控制器类中引用UI组件的任务变得相对灵活来减轻UI更改所带来的一些负担。

然后,我们在上一篇文章中探讨了ZK中的MVVM模式如何允许单个ViewModel提供不同的视图。

这篇文章标志着一系列文章的开始,这些文章将逐步使用ZK从头开始构建一个简单的应用程序。

目的

现在,我们将构建一个简单的库存管理功能,该功能仅限于将数据收集从数据库加载和呈现到表中。

ZK实战功能

  • MVVM:加载
  • 模板标签

使用MVVM将数据加载并渲染到表中

假设有一个名为“ Item”的对象的集合,并且有一个DataService类,该类负责缓存和与数据库(MongoDB和Morphia)进行通信。

@Entity("items")
public class Item {@Idprivate ObjectId id;private String name;private String model;private int qty;private float price;private Date datemod;// getters & setters

要将数据呈现到ZK中所示的表中,我们需要实现以下部分:

  • 一个将用作我们的ViewModel的POJO
  • ZK标记文件作为我们的演示文稿

ViewModel类

public class InventoryVM {private List<item> items;public List<item> getItems() throws Exception{items = DataService.getInstance().getAllItems();return items;}}
  • 第3行,需要将项目列表声明为VM类的属性
  • 第5行,我们需要提供一个getter方法,以便Binder可以检索项目列表。 概括地说,活页夹保留了对UI组件和ViewModel的引用,因此,当View中触发事件时,它可以使双方的数据以及ViewModel中的调用命令方法保持同步。

标记

<window apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('lab.sphota.zk.ctrl.InventoryVM')"><listbox model="@load(vm.items) "><listhead><listheader label="Name" /><listheader label="Model" /><listheader label="Quantity" /><listheader label="Unit Price"/><listheader label="Last Modified" /></listhead><template name="model" var="item" ><listitem><listcell><textbox value="@load(item.name)" inplace="true" /></listcell><listcell><textbox value="@load(item.model)" inplace="true" /></listcell><listcell><spinner value="@load(item.qty)"  inplace="true" /></listcell><listcell><decimalbox value="@load(item.price)" inplace="true" format="#,###.00"/></listcell><listcell label="@load(item.datemod)" /></listitem></template></listbox>
</window>
  • 第1行,我们应用ZK的BindComposer的默认实现。 它负责实例化我们的VM实例以及Binder实例。
  • 第2行,我们提供了要实例化的ViewModel的完整类名,并为其提供了ID(在本例中为“ vm”),以供将来参考
  • 在第3行中,我们将一个数据模型(作为ViewModel实例的属性制作)分配给列表框。
  • 在第11行,我们指示Template组件迭代给定的集合。 我们还声明了一个名为“ item”的变量,该变量将迭代处理集合中的每个Item对象。 或者,我们可以省略变量声明,并使用关键字“ each”来引用数据对象(Item)。
  • 在第14、17、20、23、26行中,我们检索要在列表框中显示的Item属性。
  • 在这里,我们使用Listcell内的输入元素(文本框,微调框,十进制框)来预期将来可编辑表的实现。 如果未选择这些属性,则“ inplace = true”属性会将这些输入元素呈现为常规标签。



结语

ZK Binder是ZK MVVM工作的核心。 它包含对UI组件和ViewModel的引用。 ViewModel类只是一个POJO,我们在其中声明和分配数据模型。 它公开了getter方法,因此Binder可以检索数据并将其绑定到它们各自的带注释的UI组件。 然后,template标签允许我们相对于数据模型迭代地呈现UI组件。 在我们的例子中,使用模板标记通过bean集合迭代地呈现5个Listcell的行,每个单元具有bean属性。

在下一篇文章中,我们将实现“添加”功能,以便我们可以使用MVVM的表单绑定将新条目保存到现有清单中。

参考 ZK开发人员参考

参考: ZK in Action [0]:MVVM –从Tech Dojo博客上的JCG合作伙伴 Lance Lu 加载和渲染数据 。

翻译自: https://www.javacodegeeks.com/2012/07/zk-in-action-mvvm-load-and-render-data.html

mvvm 耗时加载进度条

mvvm 耗时加载进度条_ZK的实际应用:MVVM –加载和渲染数据相关推荐

  1. 浅谈前端实现页面加载进度条以及 nprogress.js 的实现

    以前在 Vue 的项目用了 nprogress 这个插件,一直对于其如何得知加载进度充满好奇,最近又看到了「前端如何实现页面加载进度条」这个问题,今天周六恰好一探究竟.以下仅为一家之言,如有异议,欢迎 ...

  2. 一个KVO 实现WKWebView加载进度条的例子 (注意最后移除观察者)

    // // OpenWebViewController.m // Treasure // // Created by 蓝蓝色信子 on 16/7/29. // Copyright © 2016年 GY ...

  3. WKWebView Safari调试、JS互调、加载进度条、JS中alert、confirm、prompt

    主要内容 Safari调试 swift/OC与JS互调 增加加载进度条 支持JS中alert.confirm.prompt Safari调试 设置 -> safari --> 高级,开启J ...

  4. 网站预加载进度条的实现

    我们经常会看到,一些站点在首次进入的时候会先显示一个进度条,等资源加载完毕后再呈现页面,大概像这样: 然后整个页面的操作就会非常流畅,因为之后没必要再等待加载资源了.尤其是在移动端,或者是页游中,这样 ...

  5. 小米视频加载进度条效果实现

    原文:小米视频加载进度条效果实现 好吧,其实这些都是我闲暇时自己做着玩的,以前总是拿来主义,现在分享一下让我也为大家做一点贡献好了.废话不说了,看效果. 好吧 其实没什么技术含量 直接上代码好了 和我 ...

  6. Vue项目实战06:nprogress页面加载进度条

    博客: https://lvsige.top/ nprogress页面加载进度条 前言 很多时候在访问网页的时候我们总是看到页面在加载中,可以却不知道要加载多久,无期限的等待总是让人烦躁不安,所以我们 ...

  7. iview地区加载_LoadingBar 加载进度条

    LoadingBar 加载进度条 概述 全局创建一个显示页面加载.异步请求.文件上传等的加载进度条. 说明 LoadingBar 只会在全局创建一个,因此在任何位置调用的方法都会控制这同一个组件.主要 ...

  8. 【原生JS插件】LoadingBar页面顶部加载进度条

    先展示一下已经实现的效果: 预览地址:http://dtdxrk.github.io/js-plug/LoadingBar/index.html 看到手机上的浏览器内置了页面的加载进度条,想用在pc上 ...

  9. [html] 请实现一个网站加载进度条

    [html] 请实现一个网站加载进度条 import { memo } from 'react'; import { useLifecycles } from 'react-use'; import ...

最新文章

  1. php内外边距,选择器与内外边距使用方法(margin,padding使用)-2019年9月4日
  2. 【PP生产订单】入门介绍(十)
  3. 化学方程式作评、数学上成知识百科……那些“别人家的老师”有何特别?
  4. 今天中午的时候,可能是自己太忙过头了,所以出现了拿错卡去充值
  5. ABI (应用程序二进制接口)
  6. 百度大脑全面解析如何通过NLP、CV和ASR等技术将企业服务智能化
  7. 思维导图ubuntu_Ubuntu——思维导图导安装和configuration area错误
  8. java 自动发微博_使用node搭建自动发图文微博机器人
  9. 分享超高清多机位现场直播间搭建方案
  10. 手机/电脑的wifi已连接不可上网是什么原因?怎么办?
  11. zookeeper--模拟买票代码
  12. php不建议用织梦cms,你不得不知的织梦cms安全性设置常识 - DeDecms
  13. 合并字符串(c++)
  14. jQuery实现轮播(jQuery究竟有多好用)
  15. Linux之系统安装读书笔记
  16. 机器人HEXA登陆DEFCon黑客大会,上演拆弹竞赛
  17. 社区分享丨雪花啤酒的JumpServer堡垒机使用体会
  18. 西门子 s7-1200和V90伺服3轴PTO
  19. 18937 阿克曼(Ackmann)函数
  20. No.2 大众点评评论爬取

热门文章

  1. 【php】php对mysql的连接操作【mysql】
  2. sql事务、视图和索引
  3. Android 获取屏幕宽度和高度直接转换为DP
  4. c语言模拟题答案及解析,全国计算机等考二级C语言模拟试题,答案及解析一
  5. 水晶报表图形位置_看了我用Excel做的年度报表,老板直夸好
  6. spring-boot--整合thymeleaf模板
  7. jmc线程转储_查找线程转储中的异常和错误
  8. boot gwt_带Spring Boot的GWT
  9. aws lambda使用_使用AWS Lambdas扩展技术堆栈
  10. functor_纯Java中的Functor和Monad示例