浅谈JavaScript的Polymer框架中的事件绑定


Posted in Javascript onJuly 29, 2015

既然是一套完整的前端框架那就一定有提供事件绑定相关的支持。其实在之前的例子中就使用过事件绑定,只是没有单独系统地介绍过而已。 Polymer 的事件思想是对事件处理函数尽可能地都命名并定义到 VM 上,我觉得这个做法是在有意地把 VM 这一层隔离出来。

下面这个例子给按钮和其所在的 Shadow DOM Host 都绑定了个事件,点击按钮后两个事件都会触发。
运行

<script> var Polymer = { dom: 'shadow' }; </script>
<base href="http://www.web-tinker.com/share/" />
<link rel="import" href="polymer/polymer.html" />

<dom-module id="demo-test">
 <template>
  <button on-click="clickHandler">求点击 (=~ω~=)</button>
 </template>
 <script>
  Polymer({
   is: 'demo-test',
   listeners: {
    'click': 'clickHandler'
   },
   clickHandler: function(e) {
    console.log(e.target);
   } 
  });
 </script>
</dom-module>

<demo-test></demo-test>

listeners 是一个用于给当前 Shadow DOM Host 添加事件的(虽然我觉得它没卵用)。直接在 DOM 元素上的 on-* 属性也可以给某个元素绑定事件。这些方式绑定的都是 DOM 事件,事件触发时传递过去的对象就是原生的事件对象。

除了以上这些直接作为属性设置的事件绑定方式之外,我们还可以动态地绑定事件。
运行

<script> var Polymer = { dom: 'shadow' }; </script>
<base href="http://www.web-tinker.com/share/" />
<link rel="import" href="polymer/polymer.html" />

<dom-module id="demo-test">
 <template>
  <button>求点击 (=~ω~=)</button>
 </template>
 <script>
  Polymer({
   is: 'demo-test',
   ready: function() {
    // Polymer 内置
    this.listen(this, 'click', 'clickHandler');
    // 原生
    this.addEventListener('click', this.clickHandler);
   },              
   clickHandler: function(e) {     
    console.log(e);
   }
  });
 </script>
</dom-module>

<demo-test></demo-test>

Polymer 总是希望我们对事件处理函数命名,比如其自带的 listen 方法对元素绑定的不是一个事件处理函数,而是一个事件处理函数名。也许这么做的目的是将 VM 和 M 完全隔离开来,但是我并不喜欢这样。不过 Shadow DOM Host 本身也是一个原生对象,所以直接使用原生的 addEventListener 也是可以的,不过既然框架内有提供,我也不推荐写原生。也许是我的思想太 low 的,无法领悟 Polymer 如此设计的良苦用心吧?

Javascript 相关文章推荐
javascript一点特殊用法
May 28 Javascript
jquery 获取dom固定元素 添加样式的简单实例
Feb 04 Javascript
Javascript 赋值机制详解
Nov 23 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
基于jquery实现轮播焦点图插件
Mar 31 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
vue.js学习之vue-cli定制脚手架详解
Jul 02 Javascript
微信小程序template模板实例详解
Oct 27 Javascript
vue实现word,pdf文件的导出功能
Jul 31 Javascript
Vue实现表格中对数据进行转换、处理的方法
Sep 06 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
May 31 Javascript
详解Vue 的异常处理机制
Nov 30 Vue.js
探讨JavaScript中的Rest参数和参数默认值
Jul 29 #Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 #Javascript
js数组去重的方法汇总
Jul 29 #Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
Jul 29 #Javascript
JavaScript中的cacheStorage使用详解
Jul 29 #Javascript
JavaScript中数组继承的简单示例
Jul 29 #Javascript
小议JavaScript中Generator和Iterator的使用
Jul 29 #Javascript
You might like
PHP中Session的概念
2006/10/09 PHP
php 中include()与require()的对比
2006/10/09 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
linux下编译安装memcached服务
2014/08/03 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
javascript radio 联动效果
2009/03/04 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
js单例模式详解实例
2013/11/21 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
vue实现文件上传读取及下载功能
2020/11/17 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
python监控文件或目录变化
2016/06/07 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
python删除某个字符
2018/03/19 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python创建子类的方法分析
2019/11/28 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
教师自我鉴定范文
2013/11/10 职场文书
成品仓管员岗位职责
2013/12/11 职场文书
集中整治工作方案
2014/05/01 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书