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 wmp操作代码小结(音乐连播功能)
Nov 08 Javascript
js读取注册表的键值示例
Sep 25 Javascript
css样式标签和js语法属性区别
Nov 06 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
Apr 14 Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
Jquery实现纵向横向菜单
Jan 24 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
Apr 20 jQuery
iscroll.js滚动加载实例详解
Jul 18 Javascript
bootstrap Table插件使用demo
Aug 07 Javascript
Vue-cli配置打包文件本地使用的教程图解
Aug 02 Javascript
微信小程序使用二次贝塞尔曲线画波浪
Dec 25 Javascript
Vue3 响应式侦听与计算的实现
Nov 11 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多层数组与对象的转换实例代码
2013/08/05 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
Vue实现todolist删除功能
2018/06/26 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
python线程池threadpool实现篇
2018/04/27 Python
使用python进行拆分大文件的方法
2018/12/10 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
Why we need EJB
2016/10/20 面试题
小学运动会班级口号
2014/06/09 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
2015大学生求职信范文
2015/03/20 职场文书
《植树问题》教学反思
2016/03/03 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang