Knockout.js初体验
前不久在网上看到一个轻量级MVVM js类库叫Knockout.js,觉得很好奇,搜了一下Knockout.js相关资料,也初体验了一下,顿时感觉这个类库的设计很有意思。接下来就搞清楚什么是Knockout.js
Knockout.js有4个重要的概念:(一定要牢记)
1.声明绑定:使用简明易读的语法很容易地将模型(model)数据关联到DOM元素上。
2.UI界面自动刷新:当您的模型状态(model state)改变时,您的UI界面将自动更新。
3.依赖跟踪:为转变和联合数据,在你的模型数据之间隐式建立关系。
4.模板:为您的模型数据快速编写复杂的可嵌套的UI。
Knockout.js工作原理:
是以数据模型为基础,创建响应显示,编辑用户界面的javascript类库,可以自动更新UI界面。主要根据数据的判断和获取来控制UI界面的响应和展示。
接下来一段小例子分解分析:(功能说明:我要选择我想看的类型的书籍,当我选中一种类型,页面就会展示出我要选择的信息,书名和价钱)
首先我们要在页面引用Knockout.js
<script type="text/javascript" src="js/knockout.js"></script>
然后自己在HTML里面添加元素,我拿<select>标签为例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link type="text/css" rel="stylesheet" href="css/klm.css">
</head>
<body>
<select data-bind="options:dataList,optionsText:'name',value:chosenKlm"></select>
<table>
<tr>
<td>书名:</td>
<td><h2 data-bind="text:chosenKlm().des"></h2></td>
</tr>
<tr>
<td>价钱:</td>
<td><p data-bind="text:formatPrice(chosenKlm().price)"></p></td>
</tr>
</table> </body>
<script type="text/javascript" src="js/knockout.js"></script>
<script type="text/javascript" src="js/klm.js"></script>
</html>
网页显示截图如下:

通过上面的HTML标签都可以看到一个自定义参数data-bind,这个参数在整个页面发挥很重要的作用,绑定语法的入口,通过这个自定义参数可以实现很多功能,这就是Knockout.js魅力所在。
从页面截图看到默认书类型为故事类,书名:故事会,价钱:0 这里我在js中做了一个三元表达式的判断,
主要看js写法和展现的结构,单独定义了一个klm.js用来处理页面逻辑:
/**
* Created by 蒯灵敏 on 15-2-12.
*/
//创建假数据
var dataList = [
{ name: '故事类', des: '故事会', price: 0 },
{ name: '文学类', des: '红楼梦', price: 50 },
{ name: '科幻类', des: '星球大战', price: 19.952 },
{ name: '笑话类', des: '逗比趣事', price: 18.503 }
];
//编辑显示的价钱格式
var formatPrice= function(price){
return price == 0 ? 0: "$" + price.toFixed(2);
};
var viewModel = {
chosenKlm: ko.observable(dataList[0])
}; ko.applyBindings(viewModel);
首先定义了一个dataList用来模拟用到的数据,然后创建一个viewModel,用来把数据绑定到DOM节点上去,并且Knockout.js提供一个observable函数用来监控数据的作用。在这里单单创建一个viewModel是无法让页面进行数据交互的,需要通过appplyBindings函数来进行绑定才能实现页面交互效果;
ko.applyBindings有2个参数:第一个用于声明式绑定,第二个可选的,可以声明成使用data-bind的HTML元素或者容器,例如, ko.applyBindings(viewModel, document.getElementById('myid'))
例子网址:http://105.kuailingmin.sinaapp.com/klm.html
Knockout.js初体验的更多相关文章
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 【Knockout.js 学习体验之旅】(3)模板绑定
本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- 【Knockout.js 学习体验之旅】(2)花式捆绑
本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- node.js 初体验
node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为<Nodejs初阶之express ...
- 范仁义web前端介绍课程---4、html、css、js初体验
范仁义web前端介绍课程---4.html.css.js初体验 一.总结 一句话总结: html:就是网站的骨架,比如div标签.a标签等 css:style标签或者style属性里面的就是css j ...
- impress.js初体验
概述 如果你已经厌烦了使用PowerPoint制作PPT,那么impress.js是一个非常好的选择,用它做的PPT更加直观,效果也非常的不错.装X是需要一定代价的,不过如果你是个前端爱好者那么一切就 ...
- vue.js 初体验— Chrome 插件开发实录
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见 ...
- vue.js——初体验
看到最近很火的vue.js,于是开启了自己人生中首篇翻译之路,才意识到这个纯英文版的的确没有中文的通俗易懂~~~~~~不过, 还是硬着头皮把这篇英文版的博客给翻译完了,希望可以帮助自己的同时也方便别人 ...
- Node.js初体验
1.Node.js是什么 [1]Node是一个server端 JavaScript 解释器,但是真的以为JavaScript不错的同学学习Node就能轻松拿下,那么你就错了.总结:水深不深我还不知道, ...
随机推荐
- 访问javaweb服务器sessionid存放问题
sessionid存放在cookies里面,key是JSESSIONID
- 瓦片地图与geoserver发布
本文主要包括以下内容 TileMill生成Tile影像金字塔(.mbtiles压缩文件) Mbutil(https://github.com/mapbox/mbutil)解压缩 Apache HTTP ...
- 三、jQuery--jQuery基础--jQuery基础课程--第6章 jQuery 事件与应用
1.页面加载时触发ready()事件 ready()事件类似于onLoad()事件,但前者只要页面的DOM结构加载后便触发,而后者必须在页面全部元素加载成功才触发,ready()可以写多个,按顺序执行 ...
- php连接sql server
这两天有个php连接sql server的项目,顺便学习学习sql server 说明: 1:PHP5.2.x本身有个php_mssql.dll的扩展用来连接Sql server,但是这个dll只是 ...
- linux查看常用操作
linux下查看文件夹以及文件的大小: df命令可以显示目前所有文件系统的可用空间及使用情形 df -h Filesystem Size Used Avail Use% Mounted on /dev ...
- jQuery - 2.jQuery选择器
1.id 选择器 2.标签选择器 3.类选择器 4.复合选择器 5.层次选择器 JQuery的迭代 JQuery选择器 JQuery选择器用于查找满足条件的元素,比如可以用$("#控件I ...
- Deci and Centi Seconds parsing in java
http://stackoverflow.com/questions/14558663/deci-and-centi-seconds-parsing-in-java
- 17.观察者模式(Observer Pattern)
using System; using System.Collections.Generic; namespace ConsoleApplication10 { /// <summary> ...
- 【翻译十九】-java之执行器
Executors In all of the previous examples, there's a close connection between the task being done by ...
- HR外包系统 - 薪资项目分类
序号 薪资项目编码规则 6到9开头1 普通工资项目加项 7开头三位,7XX,不够时,从71XX开始2 普通工资项目减项 8开头三位,8XX,不够时,从81XX开始3 ...