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/

js架构设计模式——由项目浅谈JS中MVVM模式相关推荐

  1. 由项目浅谈JS中MVVM模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.    背景 最近项目原因使用了durandal.js和knock ...

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

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

  3. 浅谈 js 数字格式类型

    原文:浅谈 js 数字格式类型 很多人也许只知道 123,123.456,0xff 之类的数字格式. 其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有 ...

  4. php字面量,浅谈js之字面量、对象字面量的访问、关键字in的用法

    一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...

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

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

  6. js打印线程id_浅谈python中的多线程和多进程(二)

    原创:hxj7 本文继续分享一个关于python多线程和多进程区别的例子 前文<浅谈python中的多线程和多进程>中我们分享过一个例子,就是分别利用python中的多线程和多进程来解决高 ...

  7. 理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式丨C++后端开发丨Linux服务器开发丨web服务器

    理解各种设计模式原则及区别丨浅谈Nginx中核心设计模式-责任链模式 1. 开闭.单一职责.里氏替换.接口隔离等设计原则 2. 随处可见的模板方法 3. nginx中核心设计模式 责任链模式 4. 责 ...

  8. 透过湖工项目浅谈项目管理过程

    透过湖工教务项目浅谈项目管理过程   1.项目背景介绍: 湖工项目是湖北工业大学教务系统,是一种专注于大学和高等院校的教务管理系统.其中包括一些校园基本信息管理,教学培训计划管理,学生排课系统,成绩管 ...

  9. 浅谈Vue中的虚拟DOM

    Virtual DOM 是JavaScript按照DOM的结构来创建的虚拟树型结构对象,是对DOM的抽象,比DOM更加轻量型 为啥要使用Virtual DOM 当然是前端优化方面,避免频繁操作DOM, ...

最新文章

  1. [架构]--高并发问题及解决方案
  2. Spring mvc HTTP协议之缓存机制
  3. python多个strip_python 格式化多个Python3中strip()、lstrip()、rstrip()用法详解
  4. Django组件-中间件
  5. 两个空间点直接距离投影公式_线积分与面积分(2):最初的公式
  6. mac自带邮箱导出邮件_如何将电子邮件从Mac Mail导出到Notes应用程序
  7. mac安装完mysql后关机特别慢_mysql-Mac终端下遇到的问题总结
  8. 第15届创新英语大赛范文
  9. MAC中JAVA安装和环境变量设置,java 11
  10. 如何查看微信小程序的源码存放路径
  11. span标签的间距问题
  12. 机器学习——AdaBoosting
  13. 2021年flutter开发宝淘买菜前后端源码-免费开源
  14. [4G5G专题-114]:部署 - LTE PRACH前导码格式、ZC序列的生成规则与规划
  15. c语言实现hdr图像合成,怎样完成一张HDR照片的拍摄与合成
  16. 【科创人】悦跑圈CTO钱荣明:创业成瘾,识人为先
  17. 如何使用 Redis 实现 “附近的人” 这个功能?
  18. php中文网11期录播资源下载,PHP中文网原创视频提供下载啦!
  19. 奥塔在线:架构实践基础之一图胜千言
  20. Blockchain技术之区块链的概念和起源以及区块链的运行方式、发展前景和应用领域分析

热门文章

  1. XingXingMVC页面跳转处理
  2. Cookie编程入门篇
  3. 分布式服务框架 Zookeeper(二)官方介绍
  4. oracle 11g goldengate DML单向复制测试环境搭建
  5. 养成良好的学习习惯-浅谈学习方法(1)
  6. log file sycn 概述
  7. android窗口管理机制
  8. Web前端上万字的知识总结
  9. Freebsd 下用 sshguard 防止暴力破解 ssh 密码
  10. 活用"端口碰撞技术"---远程管理的好方式