认识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 相关文章推荐
JavaScript中的new的使用方法与注意事项
May 16 Javascript
Javascript 定时器调用传递参数的方法
Nov 12 Javascript
Javascript学习指南
Dec 01 Javascript
javascript Array 数组常用方法
Apr 05 Javascript
jQuery事件绑定与解除绑定实现方法
Apr 15 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
Sep 29 Javascript
vue-cli+webpack记事本项目创建
Apr 01 Javascript
详解JS中的attribute属性
Apr 25 Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
vue新建项目并配置标准路由过程解析
Dec 09 Javascript
vue中的循环对象属性和属性值用法
Sep 04 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
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
python matplotlib拟合直线的实现
2019/11/19 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
美国时尚女装在线:Missguided
2016/12/03 全球购物
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
旅游项目开发策划书
2014/01/18 职场文书
数学教师个人工作总结
2015/02/06 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书