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 相关文章推荐
完整显示当前日期和时间的JS代码
Sep 17 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
May 24 Javascript
raphael.js绘制中国地图 地图绘制方法
Feb 12 Javascript
js实现九宫格图片半透明渐显特效的方法
Feb 16 Javascript
简述Jquery与DOM对象
Jul 10 Javascript
javascript数据类型验证方法
Dec 31 Javascript
jQuery链式调用与show知识浅析
May 11 Javascript
详解VUE项目中安装和使用vant组件
Apr 28 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
May 26 Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 Javascript
解决layui-open关闭自身窗口的问题
Sep 10 Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 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
PHP添加MySQL数据记录代码
2008/06/07 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
简单的PHP缓存设计实现代码
2011/09/30 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
Yii学习总结之安装配置
2015/02/22 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
调试php程序的简单步骤
2019/10/04 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
AngularJS基础知识
2014/12/21 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
Python当中的array数组对象实例详解
2019/06/12 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
计算机本科生自荐信
2013/10/15 职场文书
教师职位说明书
2014/07/29 职场文书
2015年采购员工作总结
2015/04/27 职场文书
简短清晨问候语
2015/11/10 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
排查并解决MySQL生产库内存使用率高的报警
2022/04/11 MySQL