文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。

1.    背景

最近项目原因使用了durandal.js和knockout.js,颇有受益。决定写一个比较浅显的总结。

之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很传统的MVC开发模式了。后来,前端用Flex还有微软的WPF做过开发,到这次,前端使用纯JS+HTML,利用knockout.js,也算是接触了几种语言下的MVVM模式。

此次开发中,结合require.js和durandal.js,完成了按需加载、AMD规范以及前端页面路由。当然了,一般控件的编写和改用,还是使用的老熟人Jquery。

由于我个人一直是更倾向于GIS的理论和算法研究,平心而论,并不算一个在前端上有造诣的人,写的不好望大家见谅。

2.MVC、MVP和MVVM的对比

MVC这种经典模式,基本做WEB开发的人都是最先接触到这种开发方式的。各种框架,也都提供了这种模式的支持,比如Spring、Struts、Hibernate等。

MVC的优点就不用跟大家一一介绍了。这里大致说下此开发模式的一个缺点。

张占岭老师在其博客(http://www.cnblogs.com/lori/p/3501764.html)很详细的讲解了它的缺点。这里进行引用:View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些 业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,及View。所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。

就我个人的开发经验上来说便是,Web开发中的Controller主要是指后台端的Controller,它对请求进行解析,返回一个Model给指定的View,由一般用JSP写的View来对Model进行解析和展示。但是在前端中的View层面上,很难实现View和Model的分离。也就是张占岭提到的View里包含Model信息。并且由于Model的展示与业务需求有关,JSP中本身还经常嵌带标签语句和JS语句来完成View的展示。所以JSP的重复利用率是很低的。

再后来,Flex和WPF出现了。这两种前端开发方式,号称是RIA技术。Flex中倡导用MXML来写界面,AS来写逻辑。WPF中倡导用XAML来写界面,C#来写逻辑。也就是专门做一个presenter,将后台返回的Model进行处理,然后在View中进行显示。而View对Model的修改也是通过presenter来进行控制。那么这个流程变成了:后台的Controller返回Bean,前台的Presenter进行解析来显示View,反转过去也是相同:即C(后台)+MPV。

同时,在Flex和WPF中均提出了数据绑定这种概念,也就是View由数据来驱动。当数据变动时View便进行改变,View中数据变动时也会导致绑定的数据变动。利用此概念,我们可以正式开启前端的MVVM模式了,即(Model-View-ViewModel),于是我们的MVC模式变成了——C(后台)+MVVM。

3.简谈JS中搭建MVVM框架

3.1首先引入durandal.js和kockout.js

利用已经引入的require.js对需要引入的js进行配置。

3.2配置路由

这里以配置teacher页面为例子。

3.3开发teacher页面

3.3.1开发ModelView

3.3.2开发View

4.学习资料

Durandal.js学习地址:http://durandaljs.com/

Knockout.js学习地址:http://knockoutjs.com/

附:

requir.js学习地址:http://requirejs.org/

underscore.js学习地址:http://underscorejs.org/

CodeMirror.js学习地址: http://codemirror.net/

                          -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                          

由项目浅谈JS中MVVM模式相关推荐

  1. js架构设计模式——由项目浅谈JS中MVVM模式

    1.    背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...

  2. 浅谈JS中常见的问题(三)

    往期文章目录 浅谈JS中常见的问题(一) 浅谈JS中常见的问题(二) JS知识总结 往期文章目录 前言 11. 同步和异步的区别 12. JS 判断变量类型的几种方法 13. 如何阻止事件冒泡与默认事 ...

  3. 浅谈js中的this

    js中,this自动引用正在调用的当前方法 . 前的对象.简而言之,this就是指向当前对象.举例说明: 1. obj.fun()中如果出现this.那么,this就是指向obj 2. new Fun ...

  4. 浅谈js中的异步编程

    转载自品略图书馆 http://www.pinlue.com/article/2020/07/0412/3110968788347.html JS异步编程模型 在理解js异步编程时, 我们先再心中想一 ...

  5. 浅谈JS中的escape,URLEncode与encodeURIComponent

    在JS中,escape,URLEncode与encodeURIComponent都是编码方法,一般用于对URL进行编码 为什么要使用编码方法 网络标准RFC 1738做了硬性规定: "... ...

  6. 浅谈js中的var和function变量提升,var声明变量提升,块级作用域中的函数提升

    1.首先最常见的一种变量提升 console.log(a); //输出 undefinedvar a=10;console.log(a) // 输出 10 var 有提升的作用其实上面的代码会变成会变 ...

  7. 浅谈Android中MVP模式用于实际项目中的问题与优化

    学习MVP不算久,前段时间才把公司的两个项目完全转换为MVP模式,改了下来,略有心得,给大家分享一下. 才开始学习使用MVP时,看到大家说了很多MVP的优点,代码复用,条理清晰等等.不过我改下来发现, ...

  8. java中parseint函数_浅谈 js中parseInt函数的解析

    首先还是从很热门的实例parseInt("09")==0说起. parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制. 比如说pa ...

  9. 浅谈JS发布订阅模式

最新文章

  1. 发送邮件程序(Csharp2005)
  2. 移动安全问题不可掉以轻心,Check Point剖析近日移动安全问题
  3. 算法---------搜索旋转排序数组
  4. Metasploit Shell升级Meterpreter会话技巧
  5. 一文带你了解腾讯位置服务的开发与接入
  6. 分析启动耗时 android,Android app启动耗时分析
  7. telnet入侵linux,教你入侵RedHatLinux
  8. TreeView中右击直接获取节点的方法
  9. (20)Xilinx PCIE中断调试成功(学无止境)
  10. 简述直方图和柱形图的区别_如何区分直方图与柱形图
  11. Excel中复杂跨行跨列数据
  12. 个人整理的常用python脚本【很好用】
  13. Oracle 12C -- 不同容器之间切换
  14. ucosii 知识点总结
  15. C++ 常用代码大全
  16. php 三菱plc,三菱FX系列PLC编程语言概述及之间的转换关系
  17. 海思Hi3796MV200最新官方SDK
  18. html 加号按钮变减号,带有javascript附加输入的加号/减号按钮
  19. go---token解析与构造
  20. python拆分参数列表_Python序列拆分操作符与映射拆分操作符实例

热门文章

  1. NET4.0新功能之String.IsNullOrWhiteSpace() 方法
  2. linux重要的目录之etc
  3. python的顶级库_世界上最顶级的python库,NumpyPandas
  4. python日期选择框_Python的Django框架中设置日期和字段可选的方法
  5. 《中国人工智能学会通讯》——11.34 基于近似动态规划的优化控制研究及 在电力系统中的应用...
  6. Codeforces 484E Sign on Fence(是持久的段树+二分法)
  7. 查找内容grep命令
  8. u盘当启动盘(多种方法)
  9. 用二分法求方程的近似解的方法
  10. python数据变更邮件提醒_Python之Bilibili自动更新邮件提醒并任务栏图标「完整代码」...