KnockoutJS 3.X API 第四章之click绑定


Posted in Javascript onOctober 10, 2016

目的

click绑定主要作用是用于DOM元素被点击时调用相关JS函数。最常见用于button、input、a元素。

例如:

You've clicked 0timesClick me

源码:

<div>
You've clicked <span data-bind="text: numberOfClicks"></span> times
<button data-bind="click: incrementClickCounter">Click me</button>
</div>
<script type="text/javascript">
var viewModel = {
numberOfClicks : ko.observable(0),
incrementClickCounter : function() {
var previousCount = this.numberOfClicks();
this.numberOfClicks(previousCount + 1);
}
};
</script>

如上述例子,没点过button被点击时都会触发incrementClickCounter 回调函数,从而更新视图状态。

备注,click后所跟的并不一定非得是视图模型的函数。可以是任何对象的函数,直接引用即可。例如:click: someObject.someFunction。

备注1:传递一个参数

当您的处理程序中,UI展示了一个监控属性数组,例如:

LondonRemove
ParisRemove
TokyoRemove

源码:

<ul data-bind="foreach: places">
<li>
<span data-bind="text: $data"></span>
<button data-bind="click: $parent.removePlace">Remove</button>
</li>
</ul>
<script type="text/javascript">
function MyViewModel() {
var self = this;
self.places = ko.observableArray(['London', 'Paris', 'Tokyo']);
// The current item will be passed as the first parameter, so we know which place to remove
self.removePlace = function(place) {
self.places.remove(place)
}
}
ko.applyBindings(new MyViewModel());
</script>

当点击remove时只会删除当前的项目,从源码上看,说明传递的是当前项目。这种在渲染集合数据的时候特别有用。

需要注意两点:

如果你是一个嵌套在绑定上下文,例如,如果使用foreach或with绑定,但你的处理函数是根视图模型或其他一些父模型,你需要使用一个前缀,如$parent或$root定位处理函数。
在您的视图模型,但是这是可以使用self(或其他一些变量)作为this的一个别名。

备注2:传递事件对象(多参数)

一些情况下,你可能需要访问DOM的事件对象(event),一般情况下KO会将事件对象作为第二个参数传递给函数。例如:

<button data-bind="click: myFunction">
Click me
</button>
<script type="text/javascript">
var viewModel = {
myFunction: function(data, event) {
if (event.shiftKey) {
//do something different when user has shift key down
} else {
//do normal action
}
}
};
ko.applyBindings(viewModel);
</script>

如果你要传递更多的参数,可以使用函数文本的方式。例如:

<button data-bind="click: function(data, event) { myFunction('param1', 'param2', data, event) }">
Click me
</button>

还有更优雅的写法,比如使用bind函数绑定多个参数。例如:

<button data-bind="click: myFunction.bind($data, 'param1', 'param2')">
Click me
</button>

备注3:允许默认点击动作

默认情况下,Ko会阻止任何默认动作。比如你把click绑定到一个a标签上,当点击时,浏览器会调用click绑定的回调函数。但是不会执行href的连接跳转。

如果你不希望这种默认的阻止动作。可以在回调函数中返回true。

备注4:防止冒泡事件

默认情况下,KO允许click绑定继续到任何高级别的事件处理。例如,父元素和子元素都有click绑定,那么这两个元素的click绑定会都被触发。

可以使用一个附加绑定clickBubble来解决该问题:

<div data-bind="click: myDivHandler">
<button data-bind="click: myButtonHandler, clickBubble: false">
Click me
</button>
</div>

如上述例子,myButtonHandler将被调用,而附件绑定clickBubble,并设置了false,这至使父元素的myDivHandler不会被调用。

备注5:与Jquery互动

如果存在Jquery的click事件,KO将会去调用Jquery的click事件,如果你想总是使用自己本地的事件来处理,可以在ko.applyBindings中加入如下代码:

ko.options.useOnlyNativeEvents = true;

以上所述是小编给大家介绍的KnockoutJS 3.X API 第四章之click绑定,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery 拾色器插件发布-jquery.icolor.js
Oct 20 Javascript
基于jQuery的投票系统显示结果插件
Aug 12 Javascript
关于删除时的提示处理(确定删除吗)
Nov 03 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
Feb 28 Javascript
文本域光标操作的jQuery扩展分享
Mar 10 Javascript
JS实现的最简Table选项卡效果
Oct 14 Javascript
JavaScript实现审核流程状态的动态显示进度条
Mar 15 Javascript
基于js的变量提升和函数提升(详解)
Sep 17 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
React BootStrap用户体验框架快速上手
Mar 06 Javascript
JavaScript常用工具方法封装
Feb 12 Javascript
解决vant-UI库修改样式无效的问题
Nov 03 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
Oct 10 #Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
Oct 10 #Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
Oct 10 #Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 #Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 #Javascript
浅谈jquery中使用canvas的问题
Oct 10 #Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 #Javascript
You might like
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
为您的家、后院、车库等在线购物:Spreetail
2019/06/17 全球购物
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
电子商务专业个人的自我评价分享
2013/10/29 职场文书
驾驶员培训方案
2014/05/01 职场文书
领导班子对照检查材料
2014/09/22 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
个人总结与自我评价
2015/02/14 职场文书
测量员岗位职责
2015/02/14 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
岁月神偷观后感
2015/06/11 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
利用JavaScript写一个简单计算器
2021/11/27 Javascript
Django基础CBV装饰器和中间件
2022/03/22 Python
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技