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 相关文章推荐
JavaScript入门教程(5) js Screen屏幕对象
Jan 31 Javascript
Javascript 自定义类型方法小结
Mar 02 Javascript
Node.js编码规范
Jul 14 Javascript
jquery中change()用法实例分析
Feb 06 Javascript
Node.js事件驱动
Jun 18 Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 Javascript
Bootstrap Validator 表单验证
Jul 25 Javascript
vue实现商城购物车功能
Nov 27 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
Jan 09 jQuery
layui前端时间戳转化实例
Nov 15 Javascript
JavaScript实现多文件下载方法解析
Aug 07 Javascript
vue 监听 Treeselect 选择项的改变操作
Aug 31 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
投票管理程序
2006/10/09 PHP
几种显示数据的方法的比较
2006/10/09 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
laravel5.6实现数值转换
2019/10/23 PHP
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
Javascript var变量删除原理及实现
2020/08/26 Javascript
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
python构建基础的爬虫教学
2018/12/23 Python
python开发入门——列表生成式
2020/09/03 Python
database面试题
2013/03/28 面试题
小学教师听课制度
2014/02/01 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
介绍信如何写
2015/01/31 职场文书
法人代表资格证明书
2015/06/18 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python