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 toggle使用分析
Nov 16 Javascript
jQuery UI AutoComplete 使用说明
Jun 20 Javascript
jquery的相对父元素和相对文档定位示例代码
Aug 02 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
Aug 02 Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 Javascript
Jquery遍历节点的方法小集
Jan 22 Javascript
在JavaScript应用中实现延迟加载的方法
Jun 25 Javascript
JS中parseInt()和map()用法分析
Dec 16 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
微信小程序 数据绑定及运算的简单实例
Sep 20 Javascript
用react-redux实现react组件之间数据共享的方法
Jun 08 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
Jul 22 jQuery
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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
Prototype使用指南之selector.js说明
2008/10/26 Javascript
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
详解python中eval函数的作用
2019/10/22 Python
python3中rank函数的用法
2019/11/27 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
神路信息Java面试题目
2013/03/31 面试题
合伙经营协议书
2014/04/18 职场文书
综合管理员岗位职责
2015/02/11 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
Python学习之os包使用教程详解
2022/03/21 Python