`
s海若
  • 浏览: 17933 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

ZK6中MVVM模式的使用

阅读更多
在ZK6-RC中最主要的功能更新来自于新的数据绑定框架。(ZK6新功能

在新的数据绑定框架中ZK引入了MVVM这种设计模式。关于MVVM的定义可以参考这里

MVVM作为著名的MVC(Model/View/Controller)模式的一个变种,其主要目的在于将数据与逻辑从表示层中分离出来。也就是所对数据,逻辑和显示的解耦。
MVVM与MVC的基本目标是相同的,而MVVM比MVC更进一步的地方在于对页面控制逻辑和页面本身的解耦。
在传统的MVC框架中,为了改变视图,例如当单价超过1000时输入框显示红色背景,控制器必须持有对视图或视图中元素的引用,例如操作输入框。这样的设计在控制器中对视图有更好的控制,但是却失去了一部分灵活性。
失去的灵活性在于如果对于同一数据和逻辑有一个以上的视图,及多用户感官界面时。控制器对视图的应用所产生的依赖关系,使控制器本身失去了可重用性。
同样是上面的例子,如果同样的输入,对于有些用户提供了一个下拉列表的选择器。显然下拉列表和输入框不是相同的页面组件,其操作方式不同,但是有公用的页面逻辑。

MVVM模式通过ViewModel很好的解决了这一问题。ViewModel可以看做是一个逻辑视图,它包含了所有View的行为和状态,然后通过状态来同步实际的View.这样View可以看做是ViewModel的一个映射,而不同的View只要状态和行为相同便可以映射到相同的ViewModel上来。

在这个模式中最核心也是最巧妙的地方在于,ViewModel中没有持有任何View中可视化元素的引用

直入主题,下面用一段ZK官方的代码来比较一下两种模式的区别所在,原始页面在这里

MVC的实现方法(ZK旧的数据绑定方法)
View: helloMVP.zul
<window apply="HelloComposer">
    <label id="lbl"/>
    <button id="btn" label="Show"/>
</window>

Controller: HelloComposer.java
public class HelloComposer extends GenericForwardComposer { 
    private Label lbl;
 
    public void onClick$btn(Event event) { 
        lbl.setValue("Hello World!");
    } 
}


MVVM的实现方式
View: helloMVVM.zul
<window apply="org.zkoss.bind.BindComposer" viewModel="@bind(vm='org.zkoss.mvvm.examples.hello.HelloViewModel')">
    <label value="@bind(vm.message)"/>
    <button label="Show" onClick="@bind('showHello')"/>
</window>

ViewModel: HelloViewModel.java
public HelloViewModel {
    private String message;
    public String getMessage() {
        return message;
    }
     
    @NotifyChange("message")
    public void showHello() {
        message = "Hello World!";
    }
}
分享到:
评论

相关推荐

    ZK MVC与MVVM模式联合实现动态分页

    MVVM模式是微软WPF和XAML环境中提出的一种新设计模式,它强调数据绑定和依赖注入。在MVVM中,模型仍然是数据层,视图是用户界面,而ViewModel则是连接模型和视图的桥梁,它包含了业务逻辑和数据转换,使视图能够直接...

    zk项目搭建文档

    zk项目搭建文档,用于zk项目的mvvm模式的 开发 项目。

    ZK开发文档中文HTML版

    在MVVM模式下,开发者可以分离视图的呈现逻辑和业务逻辑,提高代码的可维护性和可测试性。ViewModel作为数据模型和视图之间的桥梁,使得数据变化能自动反映到视图上,反之亦然。 ZK还支持AJAX技术,但无需编写复杂...

    ZK开发手册中文3.5.1版

    ZK的MVVM(Model-View-ViewModel)架构模式,使开发者能够更高效地处理数据绑定和用户交互。 其次,ZK 3.5.1版本中对Spring的整合是重要的升级点。Spring是一个全面的后端框架,涵盖了依赖注入、AOP(面向切面编程...

    ZK中文开发手册 html

    3. **数据绑定**:ZK的双向数据绑定功能使得UI和数据模型之间的同步变得简单,手册会阐述如何利用MVVM(Model-View-ViewModel)模式进行数据管理。 4. **事件处理**:讲解如何处理用户交互,包括点击事件、键盘事件...

    ZK框架开发手册

    ViewModel是MVVM模式中非常核心的概念,它包含了数据和行为,允许在不需要编写额外JavaScript代码的情况下与视图进行交互。手册中阐述了ViewModel中的初始化、数据和集合的操作,以及如何在ViewModel中使用@Init、@...

    ZK安装 ZK入门 开发 讲解 共3个pdf

    3. **数据绑定**:掌握MVVM(Model-View-ViewModel)模式,学习如何使用数据绑定将UI组件与后台数据模型关联起来,实现数据的实时更新。 4. **Ajax通信**:理解ZK如何使用Ajax技术实现无刷新交互,提升用户体验。 ...

    zk语言开发基于Ajax的东西

    4. **MVVM模式**:ZK支持Model-View-ViewModel(MVVM)设计模式,这使得业务逻辑和视图层分离,提高了代码的可维护性和复用性。 5. **国际化与本地化**:ZK框架内置了多语言支持,方便开发者创建面向全球用户的Web...

    基于java的Ajax框架 ZK.zip

    总的来说,ZK是一个全面的Java Ajax框架,它提供了丰富的组件、直观的事件处理和高效的MVVM模式,简化了RIA的开发流程,尤其适合企业级应用的开发。结合其与Spring的深度集成以及对安全性和性能的关注,ZK成为了Java...

    zk+jsp实现登录、注册、修改密码小例子

    在本项目"zk+jsp实现登录、注册、修改...通过深入学习和实践,开发者可以进一步了解ZK的高级特性,如Composer、Event Handling、Composer和MVVM模式,以及如何结合其他技术如Spring和MyBatis来构建更复杂的企业级应用。

    ZK开发手册 3.06 Word版

    3. **MVVM模式**:ZK支持Model-View-ViewModel(MVVM)架构模式,这使得视图和数据模型之间的绑定变得更加简单,减少了代码量并提升了可维护性。 4. **表达式语言(EL)**:ZK使用一种特殊的表达式语言,允许在XML...

    zk最新版本

    2. **MVVM(Model-View-ViewModel)架构**:ZK 8.5可能采用了MVVM设计模式,这是一种流行的应用程序设计架构,可以简化数据绑定和视图更新,提高代码的可读性和可维护性。 3. **事件处理**:ZK支持事件驱动编程,...

    ZK_学习教程

    ZK支持MVVM(Model-View-ViewModel)模式,可以便捷地实现数据双向绑定。 4.5 动画和效果: ZK提供了多种动画效果,如淡入淡出、滑动等,增强用户体验。 总的来说,ZK通过其独特的设计理念和丰富的组件库,使得...

    ZK 开发手顺

    ZK的MVVM(Model-View-ViewModel)模式允许数据与视图自动同步,如`bind`属性可以将组件的值绑定到模型。 ZK提供了强大的组件库和丰富的功能,让开发者可以专注于业务逻辑,而不是复杂的UI实现。通过深入学习ZK,你...

    zk jfreeChart

    ZK的MVVM(Model-View-ViewModel)架构模式也使得开发过程更为简洁和高效。 2. **JFreeChart**:JFreeChart库是一个功能强大的图表生成工具,支持多种图表类型,包括时间序列、饼图、条形图、散点图、甘特图等。它...

    ZK开发手册3.05

    此外,ZK还支持多种绑定机制,如MVC(Model-View-Controller)和MVVM(Model-View-ViewModel),便于实现数据和视图的同步。 2.1 "Hello World!"章节通常是开发者入门的第一步,会展示一个简单的ZK应用实例,指导...

    ZK开发指南

    - **脚本**:支持在ZUML中使用脚本来控制组件的行为。 #### 七、Event Handling(事件处理) ZK的事件处理机制主要包括: - **监听**:注册事件监听器以响应特定事件。 - **触发**:通过组件触发事件。 - **转发**...

    zkPetShop2

    此外,ZK的MVVM(Model-View-ViewModel)架构模式有助于实现视图和数据模型的解耦,从而提高代码的可维护性和可扩展性。 HIBERNATE作为ORM工具,允许开发者用面向对象的方式来处理数据库操作,将Java对象直接映射到...

Global site tag (gtag.js) - Google Analytics