浅谈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 计算当天是本年本月的第几周
Mar 22 Javascript
javascript中的array数组使用技巧
Jan 31 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 Javascript
JS从数组中随机取出几个数组元素的方法
Aug 02 Javascript
JavaScript实现垂直向上无缝滚动特效代码
Nov 23 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
Nov 29 Javascript
vue2.0 自定义日期时间过滤器
Jun 07 Javascript
JavaScript 作用域scope简单汇总
Oct 23 Javascript
Vue设置长时间未操作登录自动到期返回登录页
Jan 22 Javascript
探讨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
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
php实现简单四则运算器
2020/11/29 PHP
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
jQuery设计思想
2017/03/07 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
python连接池实现示例程序
2013/11/26 Python
Django日志模块logging的配置详解
2017/02/14 Python
Django与JS交互的示例代码
2017/08/23 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
采购主管工作职责
2013/12/12 职场文书
银行工作检查书范文
2014/01/31 职场文书
《散步》教学反思
2014/03/02 职场文书
公司年终奖分配方案
2014/06/16 职场文书
代办出身证明书
2014/10/21 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
投诉信格式范文
2015/07/02 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript