knockoutJS学习笔记07:绑定上下文
所谓绑定上下文就是当前绑定(dat-bind)所使用到的对象(ViewModel)。在单个对象绑定的情况下是很容易理解的,但对象可能是复杂的类型,嵌套很多层,这个时候每层都有自己的上下文对象,理解起来就不是很方便了。ko通过上下文关键字,让层次间的关系变得更加清晰,相互访问变得更加简单。
一、$data 与 $index
上一篇介绍了ObservableArray和template,通常我们通过对象属性进行绑定,例如:data-bind="text:属性名称";但如果数组只是简单格式呢,例如["tom","jack","lucy"],这个时候可以用ko的几个上下文来实现。
$data 表示当前对象。下面的$data就表示 person对象。
<p>姓名:<span data-bind="text:$data.name"></span>,年龄:<span data-bind="text:$data.age"></span></p>
function Person(name,age){
this.name = name;
this.age = age;
}
var person = new Person("tom",18);
ko.applyBindings(person);
而对于["tom","jack","lucy"] 数组,$data 就是每个项的值。
$index 表示当前下标。例子:
<ul data-bind="foreach:arr">
<li><span data-bind="text:$index"></span>:<span data-bind="text:$data"></span></li>
</ul>
var arr = ["tom","jack","lucy"];
ko.applyBindings(arr);
二、$parent、$parents、$root
$parent 表示父ViewModel。例如:
<ul data-bind="foreach:data">
<li>
<p data-bind="text:name"></p>
<ul data-bind="foreach:contains">
<li>
<p><span data-bind="text:name"></span>属于<span data-bind="text:$parent.name"></span></p>
</li>
</ul>
</li>
</ul>
var data = [
{name:"水果",contains:[{name:"苹果",work:"苹果的作用"},{name:"香蕉",work:"香蕉的作用"}]},
{name:"蔬菜",contains:[{name:"青菜",work:"青菜的作用"},{name:"白菜",word:"白菜的作用"}]}
];
内部的 ul 的ViewModel是 contains 对象,之前我们用as 指定别名来访问data[i]的name属性,这里也可以直接通过$parent.name访问上层的ViewModel的name属性。
$parents 表示所有父ViewModel集合。这是一个数组,$parents[0] 就是父ViewModel,也就是 $parent;$parenrs[1] 就是父的父ViewModel...。
$root 表示根ViewModel。上面的例子,$parent 和 $root 是一样的,都表示 data 对象。如第一个例子,如果此时是在根部的话,那么 $root 与 $data 就是一样的。
三、$parentContext
表示上层的具体数据。$parent表示父ViewModel,$parentContext.$data 就可以访问这个ViewModel。如果要获得父 $index,则必须通过$parentContext.$index。
四、with 关键字
指定当前上下文,例如:
<div data-bind="with:info">
<p data-bind="text:name"></p>
<p data-bind="text:age"></p>
</div>
这样就不用老是写 info.name,info.age 了,在数据复杂时,可以简写代码。
五、总结
以上就是ko上下文几个常用的关键字,$data, $index, $parent, $root 在复杂数据类型时特别有用; with 关键字在属性多的时候可以简写代码,通过指明当前上下文,让语义更加清晰,阅读起来更加方便。
knockoutJS学习笔记07:绑定上下文的更多相关文章
- 学习笔记 07 --- JUC集合
学习笔记 07 --- JUC集合 在讲JUC集合之前我们先总结一下Java的集合框架,主要包含Collection集合和Map类.Collection集合又能够划分为LIst和Set. 1. Lis ...
- 机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析
机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析 关键字:Apriori.关联规则挖掘.频繁项集作者:米仓山下时间:2018 ...
- KnockoutJS学习笔记10:KonckoutJS foreach绑定
KnockoutJS foreach绑定用来处理数组,通常用来将一个数组绑定到一个列表或者table中.在foreach绑定中,我们可以使用if.with等嵌套绑定. 示例代码: <tabl ...
- KnockoutJs学习笔记(五)
作为一名初学者来说,一篇篇的按顺序看官网上的文档的确是一件很痛苦的事情,毕竟它的排列也并非是由浅及深的排列,其中的顺序也颇耐人寻味,于是这篇文章我又跳过了Reference部分,进而进入到具体的bin ...
- OpenCV 学习笔记 07 目标检测与识别
目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...
- [Golang学习笔记] 07 数组和切片
01-06回顾: Go语言开发环境配置, 常用源码文件写法, 程序实体(尤其是变量)及其相关各种概念和编程技巧: 类型推断,变量重声明,可重名变量,类型推断,类型转换,别名类型和潜在类型 数组: 数组 ...
- stm32寄存器版学习笔记07 ADC
STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...
- [原创]java WEB学习笔记07:关于HTTP协议
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
随机推荐
- webpack初入
序言:前面已经倒腾了grunt.gulp.fis3,今天来通过一个例子玩玩webpack!最终预览 通过下面的例子,能够了解以下几点: 1.如何安装webpack 2.如何使用webpack 3.如何 ...
- EventBus源码解析 源码阅读记录
EventBus源码阅读记录 repo地址: greenrobot/EventBus EventBus的构造 双重加锁的单例. static volatile EventBus defaultInst ...
- Android 第一http请求访问慢,以后就快了的问题
android的服务端是用MVC+ef,第一次访问特别慢,第一次以后就快了. 在网上找了很多原因,解决不了.后来发现是应用程序池的问题,准确说是ef的问题,应用程序池被回收了,请求就慢了,
- Android自定义控件(二)
这一篇主要来讲一下自定义控件中的自定义viewgroup,我们以项目中最常用的下拉刷新和加载更多组件为例 简单介绍一下自定义viewgroup时应该怎么做. 分析:下拉刷新和加载更多的原理和步骤 自定 ...
- nginx 访问目录403
centos7.2默认安装好nginx后,会在/usr/share/nginx/html下作为主目录 但是如果想访问下面的目录会发现没有权限,返回403错误 这时候要注意在/etc/nginx/ngi ...
- vimrc
我的vimrc https://github.com/juandx/vimrc 当然得装vundle git clone https://github.com/VundleVim/Vundle.vim ...
- ICompare接口、Sort()方法
1.接口中的方法并不实现具体功能,继承于该接口的类必须实现具体功能. 核心思想:对修改封闭,对扩展开放. 2.Sort()方法: 默认:Sort(内容) 英文:按照首字母顺序排序,首字母相同则看第二个 ...
- MySQL Performance-Schema(一) 配置篇
performance-schema最早在MYSQL 5.5中出现,而现在5.6,5.7中performance-Schema又添加了更多的监控项,统计信息也更丰富,越来越有ORACLE-AWR统计信 ...
- linux c++编译问题和虚拟机网络通信
1.gcc main.cpp -lstdc++ -o test5 2. service network stop service NetworkManager restart
- 统计文件种类数+获取子shell返回值的其它方法
前言 只是作为一个shell的小小练习和日常统计用,瞎折腾的过程中也是摸到了获取子shell返回值的几种方法: 肯定还有别的方法,跟进程间的通信相关,希望你能提出建议和补充,谢谢~ 完整程序: #! ...