前端MVVM框架:Knockout.JS(一)
前言
在我们平时开发 Web 应用程序的时候,如果项目不算特别大的话,一般都是拿 jQuery 再配合一些前端 UI 框架就在项目上面应用了。如果页面逻辑稍微复杂的话,那个在写前端 JavaScript 代码时,势必会充斥前大量 jQuery 的选择器的应用。我并不想说它好或不好。只想问一下,有没有更方便的方法呢?有过 WPF 开发经验的同学一定会知道 MVVM(Model View ViewModel) 这种开发模式。它可以很轻松的将 View 与 对应的后端代码隔离开来。使项目易于维护。那么这是怎么做到的呢?其实就是 WPF 里面基于事件的通知机制。在 xaml 文件里面只需要写上要绑定的属性,然后给 View 指定一下 DataContext 就可以将后端数据绑定到 View 上进行展示了。这里面不得不说的一个接口 INotifyPropertyChanged ,再具体的话就不聊了,毕竟这篇文章打算聊一下前端的 MVVM(Model View ViewModel) 框架 —— KnockoutJS。
我所知道的前端 MVVM(Model View ViewModel) 框架有三个:
- Knockout.js —— 微软开发者编写
- AngularJS —— 谷歌前端 MVVM 框架
- Avalon —— 国产
小试牛刀
在使用了前端 MVVM 框架后,我个人觉得最大的好处就是不再需要使用大量的选择器来满足自己的前端业务逻辑。它内部实现了数据的双向绑定,即当我们改变变量的值时,对应的 HTML 元素的值也会自动改变,省去了使用 $('#xxx').val(variable); 这样语法去赋值,只需要关注前端业务如何处理。即便前端业务很简单,那么使用 MVVM 会使你的业务变得比简单还简单,真的很吊哦!先来看一个简单的示例:
<form id="form1">
<table>
<tr>
<td data-bind="text: FirstName"></td>
<td data-bind="text: LastName"></td>
<td><input type="text" data-bind="value: FirstName" /></td>
</tr>
</table>
</form>
<script type="text/javascript">
var ViewModel = function() {
var self = this; self.FirstName = ko.observable("JRoger");
self.LastName = ko.observable("Song"); // 其它业务逻辑
}; ko.applyBindings(new ViewModel());
</script>
是不是省去了再用选择器的麻烦事儿?当然 Knockout.js 是兼容 jQuery 的。两大利器结合会有怎样的火花?这个要看怎么用了吧-_-||
今天先写这么点儿吧,没有什么值钱的东西在里面。后续会再写一篇使用 Knockout.js 开一个完整的模块,以将 knockout.js 更多的用法展示一下
前端MVVM框架:Knockout.JS(一)的更多相关文章
- js架构设计模式——前端MVVM框架设计及实现(二)
前端MVVM框架设计及实现(二) 在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HT ...
- js架构设计模式——前端MVVM框架设计及实现(一)
前端MVVM框架设计及实现(一) 最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我 ...
- 前端MVVM框架设计及实现(二)
在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HTML中放入了太多的逻辑,从而增加了 ...
- 轻量级前端MVVM框架avalon - 初步接触
迷你简单易用的MVVM框架 avalon的介绍http://rubylouvre.github.io/mvvm/ 按照作者的介绍,在HTML中添加绑定,在JS中用avalon.define定义View ...
- 前端MVVM框架avalon - 模型转换1
轻量级前端MVVM框架avalon - 模型转换(一) 接上一章 ViewModel modelFactory工厂是如何加工用户定义的VM? 附源码 洋洋洒洒100多行内部是魔幻般的实现 1: fun ...
- 前端测试框架对比(js单元测试框架对比)
前端测试框架对比(js单元测试框架对比) 本文主要目的在于横评业界主流的几款前端框架,顺带说下相关的一些内容. 测试分类 通常应用会有 单元测试(Unit tests) 和 功能测试(Function ...
- Web前端三大框架_angular.js 6.0(二)
Web前端三大框架_angular.js 6.0(一) 需要视频教程,看头像昵称处 一.Angular 6.0 1.1样式 html中引入样式:内嵌式,外链式,行内式. ng6中组件引入样式的方式也 ...
- 不要听吹牛逼什么前端MVVM框架就是好,其实都是一帮没学好分层设计的搞出来的,让你彻底看清前端MVVM的本质
最近前端圈子里面,发现大家都在热炒概念,什么knockout,angularJs,都被捧成神了,鄙人不才,最近心情也不好,特地写这篇文章来找骂 写代码的码农都知道,Java社区虽然不是一个提出分层思想 ...
- 轻量级前端MVVM框架avalon - 执行流程2
接上一章 执行流程1 在这一大堆扫描绑定方法中应该会哪些实现? 首先我们看avalon能帮你做什么? 数据填充,比如表单的一些初始值,切换卡的各个面板的内容({{xxx}},{{xxx|html}}, ...
随机推荐
- Quartus14.1中Qsys无法更新custom component的问题
如果对Qsys中custom component进行了改动,如果直接generate HDL无法使改动应用到实际的编译过程,需要对Qsys进行刷新操作,如下:
- MySQL5.7中使用JSON(一)
因为项目需要,存储字段存储成了JSON格式,在项目中是将查询出来的值通过jackson转成相应的bean进行处理的,觉得不够简单方便. 偶然下,知道了MYSQL5.7原生支持SQL,今天一回来就折腾安 ...
- Android 之 ServiceManager与服务管理
ServiceMananger是android中比较重要的一个进程,它是在init进程启动之后启动,从名字上就可以看出来它是用来管理系统中的service.比如:InputMethodService. ...
- TOCContro控件
TOCControl控件使用的是用伙伴控件中的数据地图,它控制图层是否在伙伴控件空显示以及和伙伴控件在符号上保持一致,TOCControl为用户提供了一个交互式的环境,如果TOCControl控件的伙 ...
- SQL复习三(子查询)
子查询 子查询就是嵌套查询,即select中包含这select,如果一条语句中存在着两个,或者两个以上的select,那么就是子查询语句了. 子查询出现的位置 where后,作为条件的一部分: fro ...
- The 2013 ACMICPC Asia Regional Chengdu
还有19天出发北京站,今年北京站的出题方是上交,去年他们出的成都现场的赛题,首先复盘一下. 去年的成都是我经历的第一次现场赛,也是近距离第一次见到了CLJ的真人,最后也是被虐惨了,那时候是声闻大神带着 ...
- Oracle使用rowid删除重复记录
/**如何删除重复记录?*//*1. 先按重复字段分组 2. 在每组里找出最小的rowid 3. 把整个表中与上面查询出来的rowid不相等的记录删除掉*/delete from test_t ...
- Ibatis自动生成dao sqlmapper文件和domain文件过程
generator自动生成mybatis的xml配置.model.map等信息: 1.下载mybatis-generator-core-1.3.2.jar包. 网址:http://cod ...
- css控制div显示/隐藏方法及2种方法比较原码 - czf164的专栏 - 博客频道 - CSDN.NET
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- 关于集合set ---STL
关于集合set的去重复,向集合中插入元素 #include<iostream>#include<set>using namespace std;int main(){ set& ...