KnockoutJs学习笔记(九)
由于component binding部分的内容更为复杂一些,所以这部分我暂时跳过,先学习click binding部分。
click binding不仅可以作用于button、input、a等元素,也可以作用于其他任何可见的DOM元素。
下面是一个简单的例子:
html部分:
<div>
You've clicked <span data-bind="text: numberOfClicks"></span> times
<button data-bind="click: incrementClickCounter">Click me</button>
</div>
js部分:
function MyViewModel() {
var self = this;
self.numberOfClicks = ko.observable(0);
self.incrementClickCounter = function() {
var previousCount = self.numberOfClicks();
self.numberOfClicks(previousCount + 1);
};
}
ko.applyBindings(new MyViewModel());
这里需要注意的是numberOfClicks的修改方法。
click binding不仅仅可以绑定viewModel中的方法,也可以绑定其他任意的方法。
注意一:在调用click binding的处理函数时,我们可以给它传递一个参数作为当前作用的项(current item),这种操作往往在处理集合或是数组时非常有用。
下面是一个简单的例子:
html部分:
<ul data-bind="foreach: people">
<li>
<span data-bind="text: $data"></span>
<button data-bind="click: $parent.removePerson">Remove</button>
</li>
</ul>
js部分:
function MyViewModel() {
var self = this;
self.people = ko.observableArray([ "Kazusa", "Chiaki", "Charlie" ]);
self.removePerson = function(person) {
self.people.remove(person);
};
}
ko.applyBindings(new MyViewModel());
注意上例中关于$parent的使用,在使用foreach binding或是with binding时,一定要明确自己能够直接调用的viewModelProperty的范围,如果在更高的层次,则要考虑使用$parent或是$root这样的前缀。
注意二:在某些时候,我们需要获取与click事件相关联的DOM event object(说起来听绕口,我觉得可以直接就说是包含click在内的能够触发相应绑定的处理函数的事件),KO将这个事件作为处理函数的第二个参数,比如说我们希望在按下shift键的clik与一般的click有所区别,则可以利用这一参数在处理函数中进行区分。
如果我们需要传递更多的参数,有以下两种方式:
<button data-bind="click: function(data, event) { myFunction('param1', 'param2', data, event) }">
Click me
</button>
<button data-bind="click: myFunction.bind($data, 'param1', 'param2')">
Click me
</button>
其中第二种方式用到了bind方法,可以参考function.prototype.bind(),这个留作以后研究。
注意三:在默认情况下,使用click binding会屏蔽掉原先click的默认功能,比如对于一个a元素,在使用click binding之后,并不会跳转到href所描述的地址。如果我们希望恢复默认的功能,只需要在click binding所绑定的处理函数的最后返回一个true即可。
注意四:在某些时候,我们的html部分可能会存在嵌套的click binding的情况,如下:
<div data-bind="click: function1">
<div data-bind="click: function2">
<button data-bind="click: function3">Click me</button>
</div>
</div>
在这种情况下,如果我们点击页面上的button,则会依次触发function3、function2、function1。为了防止这种现象,我们可以在data-bind后附加clickBubble:false来阻止click事件继续向上传递,比如说我们将代码改成这样:
<div data-bind="click: function1">
<div data-bind="click: function2">
<button data-bind="click: function3, clickBubble: false">Click me</button>
</div>
</div>
这样一来就只会触发function3。而如果我们是在function2后面添加,则只会依次触发function3和function2,以此类推。
KnockoutJs学习笔记(九)的更多相关文章
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
- MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九
<Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次 SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...
- python3.4学习笔记(九) Python GUI桌面应用开发工具选择
python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
- go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...
- Python学习笔记九
Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...
- KnockoutJs学习笔记(五)
作为一名初学者来说,一篇篇的按顺序看官网上的文档的确是一件很痛苦的事情,毕竟它的排列也并非是由浅及深的排列,其中的顺序也颇耐人寻味,于是这篇文章我又跳过了Reference部分,进而进入到具体的bin ...
- vue学习笔记(九)vue-cli中的组件通信
前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...
- C#线程学习笔记九:async & await入门二
一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...
随机推荐
- 一个由于springboot自动配置所产生的问题的解决
由于我的项目里面需要使用到solr,我做了一下solr和springboot的整合,结果启动项目的时候,就报错了...报错的信息的第一行提示如下: org.springframework.beans. ...
- gitlab迁移
1.背景: 操作系统:CentOS Linux release (Core) gitlab版本: 使用rpm包地址:https://mirrors.tuna.tsinghua.edu.cn/gitla ...
- Python【知识点】面试小点列表生成式小坑
1.问题 有这么一个小面试题: 看下面代码请回答输出的结果是什么?为什么? result = [lambda x: x + i for i in range(10)] print(result[0]( ...
- CF10D LCIS
题意翻译 求两个串的最长公共上升子序列. 题目描述 This problem differs from one which was on the online contest. The sequenc ...
- python_面向对象魔法方法指南
原文: http://www.rafekettler.com/magicmethods.html 原作者: Rafe Kettler 翻译: hit9 原版(英文版) Repo: https://gi ...
- MT【166】青蛙跳
(2015浙江重点中学协作体一模) 设ABCDEF为正六边形,一只青蛙开始在顶点A处,它每次可随意地跳到相邻两顶点之一.若在5次之内跳到D点,则停止跳动:若5次之内不能到达D点,则跳完5次也停止跳动. ...
- 洛谷SP16549 QTREE6 - Query on a tree VI(LCT)
洛谷题目传送门 思路分析 题意就是要维护同色连通块大小.要用LCT维护子树大小就不说了,可以看看蒟蒻的LCT总结. 至于连通块如何维护,首先肯定可以想到一个很naive的做法:直接维护同色连通块,每次 ...
- 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)
题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...
- 改变 小程序 select 多选框 选中图片
https://www.jianshu.com/p/11eb5b0bfe1a 注意 博客介绍的 在 wxss backgroung-image 中引入小程序内图片是不可的,传到cdn上才实现
- 第一次使用 markdown 写博客
Web前端 js 框架(四选一) 有可能的话,学 Vue.js ,React.js ,Angular.js,Awrelia css 学习 Sass 学会 css 的可编程 HTML5 详细语法 Nod ...