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游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
Aug 21 Javascript
jquery+css实现动感的图片切换效果
Nov 25 Javascript
学习JavaScript设计模式之单例模式
Jan 19 Javascript
JavaScript 身份证号有效验证详解及实例代码
Oct 20 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
Jun 07 jQuery
ionic2自定义cordova插件开发以及使用(Android)
Jun 19 Javascript
js处理包含中文的字符串实例
Oct 11 Javascript
详解关于Vue单元测试的几个坑
Apr 26 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
解决vue组件销毁之后计时器继续执行的问题
Jul 21 Javascript
Nest.js环境变量配置与序列化详解
Feb 21 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
oracle资料库函式库
2006/10/09 PHP
PHP4中session登录页面的应用
2008/07/25 PHP
php2html php生成静态页函数
2008/12/08 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
js中prototype用法详细介绍
2013/11/14 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
轻松实现jquery手风琴效果
2016/01/14 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
JavaScript 异步调用
2017/10/25 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
pandas对指定列进行填充的方法
2018/04/11 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
谈谈python垃圾回收机制
2020/09/27 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
物资采购方案
2014/06/12 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
行政二审代理词
2015/05/25 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
导游词之杭州西湖
2019/09/19 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS