认识Knockout及如何使用Knockout绑定上下文


Posted in Javascript onDecember 25, 2015

Knockout介绍

Knockout简称ko,是一个轻量级的javascript类库,采用MVVM设计模式(即Model、view、viewModel),简单优雅的实现了双向绑定,实时更新,帮助您使用干净的数据模型来创建丰富的、响应式的用户界面。

Knockout有三大核心特性:

    1.优雅的依赖跟踪(Elegant dependency tracking):任何时候数据模型的变化都会自动更新相应的UI部分;

    2.声明式绑定(Declarative bindings) : 简单的将UI和你的数据模型关联起来,你就可以创建复杂的动态UI;

    3.高度可扩展性(Trivially extensible) : 只需几行代码实现一个自定义的行为来作为声明式绑定;

其他优点:

    1.纯净的javascript代码;

    2.可以随时添加到你现有的web应用中;

    3.轻量级,GZIP后只有13K;

    4.能够工作于几乎所有主流浏览器((IE 6+, Firefox 2+, Chrome, Safari, Edge, others);

ko采用的是MVVM设计模式,即model view viewModel。

简单的例子

There are <span data-bind="text: myItems().length"></span> items

就是这么简单,你不必写代码来更新text内容,它会在数组长度改变时自动更新,与此类似,如果我们想利用数组长度控制按钮的可用性仅仅需要:

<button data-bind="enable: myItems().length < 5">Add</button>

下面接着给大家介绍使用Knockout绑定上下文

Binding context

binding context是一个保存数据的对象,你可以在你的绑定中引用它。当应用绑定的时候,knockout自动创建和管理binding context的继承关系。这种层次结构的根引用你指定的viewModel参数(ko.applyBindings(viewModel))。

然后每次使用一个控制流如with或者foreach 来创建一个子节点binding context引用嵌套的viewModel data。

$parent

<h1 data-bind="text: name"></h1>
<div data-bind="with: manager">
 <!-- Now we're inside a nested binding context -->
 <span data-bind="text: name"></span> is the
 manager of <span data-bind="text: $parent.name"></span>
</div>

$parents

这是一个数组,代表了所有的父节点view models

$parent[0] : 代表父节点;

$parent[1] : 代表祖父节点;

$parent[1] : 代表曾祖父节点;

.....以此类推

$root

它是root context的根节点视图模型对象,一般是通过ko.applyBindings指定的,相当于$parents[$parents.length - 1]。

$component

如果你在一个特定的组件模板的上下文中,$component指定的是那个component,它的指定组件相当于$root,在嵌套的组件情况下,它代表了最邻近的一个组件。

$data

它代表了当前上下文中的viewModel对象,$data和$root是相当的。在嵌套的binding context中,这个参数将设置到当前的数据项。

$data是非常有用的,例如,当你想引用viewModel本身而不是viewModel的属性的时候。

<ul data-bind="foreach: ['cats', 'dogs', 'fish']">
 <li>The value is <span data-bind="text: $data"></span></li>
</ul> 
$index(仅在foreach binding中可用)

它是一个在foreach绑定中的数组的从0开始的索引条目。不想其他的context属性,$index是observable的,即会随着数组item的更新而更新。

$parentContext

指定了父节点级别的binding context对象,与$parent不同的是,它是在父节点中指定数据而不是binding context。

$rowData

它是在当前上下文中,原viewModel的值,通常它相当于$data,但是,如果viewModel被ko以observable来修饰,$data是unobservable的,而$rowData是observable的。

Javascript 相关文章推荐
基于jQuery的动态表格插件
Mar 28 Javascript
js动态创建表格,删除行列的小例子
Jul 20 Javascript
javascript实现获取浏览器版本、浏览器类型
Dec 02 Javascript
JS仿JQuery选择器功能
Mar 08 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
Apr 14 Javascript
JS实现瀑布流布局
Oct 21 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
Dec 18 Javascript
如何在vue里添加好看的lottie动画
Aug 02 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
Sep 18 Javascript
js作用域和作用域链及预解析
Apr 11 Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 Javascript
vue3修改link标签默认icon无效问题详解
Oct 09 Javascript
详解Document.Cookie
Dec 25 #Javascript
不得不分享的JavaScript常用方法函数集(下)
Dec 25 #Javascript
JQuery datepicker 用法详解
Dec 25 #Javascript
一道JS前端闭包面试题解析
Dec 25 #Javascript
干货分享:让你分分钟学会javascript闭包
Dec 25 #Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
Dec 25 #Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
Dec 25 #Javascript
You might like
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
python获取外网IP并发邮件的实现方法
2017/10/01 Python
python try except 捕获所有异常的实例
2018/10/18 Python
python实现图片转字符小工具
2019/04/30 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
Python网页解析器使用实例详解
2020/05/30 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
Python对excel的基本操作方法
2021/02/18 Python
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
英国领先的游戏零售商:GAME
2019/09/24 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
计算机网络专业自荐书
2014/06/09 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
毕业生学校组织意见
2015/06/04 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
keepalived + nginx 实现高可用方案
2022/12/24 Servers