event binding主要用于为指定的事件添加相应的处理函数,可以作用于任意事件,包括keypress、mouseover、mouseout等(也包括之前提到的click,根据后面的描述,click binding的内部机理其实就是event binding,不过为何要把两者分开有待研究)。

下面是一个简单的例子:

html部分:

 <div data-bind="event: { mouseover: enableDetails, mouseout: disableDetails }">
Mouse over me
</div> <div data-bind="visible: detailsEnabled">
Details
</div>

js部分:

 function MyViewModel() {
var self = this; self.detailsEnabled = ko.observable(false); self.enableDetails = function() {
self.detailsEnabled(true);
}; self.disableDetails = function() {
self.detailsEnabled(false);
};
} ko.applyBindings(new MyViewModel());

event binding的参数应当是一个object,在该object中,属性名为指定的事件的名称,值为触发的处理函数。该处理函数可以是viewModel中定义的函数,也可以是其他任意object内的函数。

注意一:在调用event binding的处理函数时,我们可以给它传递一个参数作为当前作用的项(current item),这种操作往往在处理集合或是数组时非常有用。

注意二:在某些时候,我们需要获取与事件相关联的DOM event object(说起来听绕口,我觉得可以直接就说是包含事件在内的能够触发相应绑定的处理函数的事件),KO将这个事件作为处理函数的第二个参数,比如说我们希望在按下shift键时的该事件与一般的事件有所区别,则可以利用这一参数在处理函数中进行区分。

如果我们需要传递更多的参数,有以下两种方式:

 <div data-bind="event: { mouseover: function(data, event) { myFunction('param1', 'param2', data, event) } }">
Mouse over me
</div>
 <button data-bind="event: { mouseover: myFunction.bind($data, 'param1', 'param2') }">
Click me
</button>

注意三:在默认情况下,使用event binding会屏蔽掉原先event所触发的默认功能。如果我们希望恢复默认的功能,只需要在event binding所绑定的处理函数的最后返回一个true即可。

注意四:在某些时候,我们的html部分可能会存在嵌套的event binding的情况,具体实例可以参考之前click binding部分的内容,此时也可以利用类似的方法来阻止这种情况,不过不同的在于书写bubble的格式,一个简单的例子:

 <div data-bind="event: { mouseover: myDivHandler }">
<button data-bind="event: { mouseover: myButtonHandler }, mouseoverBubble: false">
Click me
</button>
</div>

可以看出,bubble与event是两种不同的binding,所以bubble不应该出现在event binding的参数中。


submit binding也可以用event binding的方式也出来。submit binding主要适用于form元素,它会覆盖掉submit事件本身所默认触发的函数,要启用默认的方式,需要在绑定的处理函数最后返回true,与click binding、event binding等类似。

KO能够将form element作为参数传递给submit的处理函数,这个参数可以方便我们去获取form element中额外的数据或是状态信息,或是借助jQuery Validation等库来触发UI级别的有效性检测。

当然,对于button来说,click binding的效果和submit binding的效果类似,但是作为作用于form的submit binding,通过按下enter键等方式也能够触发submit binding所绑定的处理函数。

submit binding的参数也并不必须要是viewModel内的函数,它也可以是任意object内的函数,其他的有关传递多个参数等的其他注意事项可以参考click binding,二者在这些方面是基本一致的。

KnockoutJs学习笔记(十)的更多相关文章

  1. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  2. Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...

  3. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  4. python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法

    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...

  5. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  6. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  7. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  8. python3.4学习笔记(十) 常用操作符,条件分支和循环实例

    python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...

  9. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  10. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

随机推荐

  1. Python之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  2. hadoop2相对hadoop1有非常重大的改进

    hadoop2相对hadoop1有非常重大的改进. 下面看一下在HDFS和MapReduce方面的改进: HDFS Federation(HDFS联邦)federation-background[1] ...

  3. BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集

    传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...

  4. 六、spring boot 1.5.4 配置多数据源

    spring boot 已经支持多数据源配置了,无需网上好多那些编写什么类的,特别麻烦,看看如下解决方案,官方的,放心! 1.首先定义数据源配置 #=====================multi ...

  5. 解题:NOI 2018 归程

    题面 清新友好的题目 跑一个最短路,然后对海拔建Kruskal重构树,从最后接上去的边(最低的一个)开始DFS一下处理子树里路程的最小值. 询问是每次在重构树上倍增找到深度最浅的海拔高于当天水位线的节 ...

  6. bzoj 3195 [Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编 ...

  7. 异步IO的并发能力:backlog的配置很重要

    今天中午正准备完工的时候,发现一个让人抓狂的问题. 一个精简版的AIO应用理论上应该比一个完整版的AIO应用并发能力高一些(因为完整版的事务处理复杂一些),在同一台机器上测试. 但测试结果显示,精简版 ...

  8. 风控3—iv算法详细解释

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  9. import和require的区别

    node编程中最重要的思想就是模块化,import和require都是被模块化所使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转 ...

  10. E1. Array and Segments (Easy version)(暴力) && E2. Array and Segments (Hard version)(线段树维护)

    题目链接: E1:http://codeforces.com/contest/1108/problem/E1 E2:http://codeforces.com/contest/1108/problem ...