KnockoutJs学习笔记(十)
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学习笔记(十)的更多相关文章
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
- python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- python3.4学习笔记(十) 常用操作符,条件分支和循环实例
python3.4学习笔记(十) 常用操作符,条件分支和循环实例 #Pyhon常用操作符 c = d = 10 d /= 8 #3.x真正的除法 print(d) #1.25 c //= 8 #用两个 ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
随机推荐
- Vue项目框架
Vue项目框架 基本组件的使用: new Vue({ el, //要绑定的DOM element data, //要绑定的资料 props, //可用来接收父原件资料的属性 template, //要 ...
- XShell中文乱码问题解决
现象:XShell终端中输入中文显示乱码 原因:XShell终端的编码格式与服务器不同 解决:修改XShell终端的编码格式:菜单中点击,文件->属性->终端->编码,选择“UTF- ...
- IDEA中新建Module时Module name、Content root、Module file location的含义
如下图测试: 最开始默认情况下,Content root.Module file location两行,最末尾的数据跟Module name是相同的. 现在对三行数据,强制进行不同的命名,Finish ...
- 【刷题】洛谷 P4782 【模板】2-SAT 问题
题目背景 2-SAT 问题 模板 题目描述 有n个布尔变量 \(x_1\)~\(x_n\),另有m个需要满足的条件,每个条件的形式都是"\(x_i\)为true/false或\(x_j ...
- bzoj1016/luogu4208 最小生成树计数 (kruskal+暴搜)
由于有相同权值的边不超过10条的限制,所以可以暴搜 先做一遍kruskal,记录下来每个权值的边使用的数量(可以离散化一下) 可以证明,对于每个权值,所有的最小生成树中选择的数量是一样的.而且它们连成 ...
- java application maven项目打自定义zip包
1.配置pom.xml文件,添加build节点 <build> <!-- 输出的包名 --> <finalName>p2p</finalName> &l ...
- ASP.NET MVC学习之Log4Net配置(日志记录)
Log4Net配置笔记---- 首先,添加对log4net.dll的引用. 在Web.config文件下的Configuration节点下添加Log4Net的配置信息: <!--Log4Net配 ...
- windows2008设置IIS服务器定时自动重启的方法
我们在使用windows2008下IIS服务器时会经常出现资源耗尽的现象,运行一段时间下来就会出现访问服务器上的网站时提示数据库连接出错,重启IIS后网站又能正常访问了,这个问题可能困扰了很多站长朋友 ...
- Content-Type:几种常用数据编码格式
Content-Type: 用于定义用户的浏览器或相关设备如何显示将要加载的数据,或者如何处理将要加载的数据. 内容类型,一般指网页中存在的Content-Type,Content-Type属性指定请 ...
- SQL记录-PLSQL字符串
PL/SQL字符串 PL/SQL字符串实际上是一个可选的尺寸规格字符序列.字符可以是数字,字母,空白,特殊字符或全部的组合. PL/SQL提供了三种类型的字符串: 固定长度字符串:在这样的字符串,程序 ...