浅谈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 相关文章推荐
jQuery的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
JSON语法五大要素图文介绍
Dec 04 Javascript
js禁止页面使用右键(简单示例代码)
Nov 13 Javascript
AngularJS入门心得之directive和controller通信过程
Jan 25 Javascript
vue实现动态数据绑定
Apr 28 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
Jul 11 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
node 命令方式启动修改端口的方法
May 12 Javascript
jQuery实现的中英文切换功能示例
Jan 11 jQuery
详解vue中axios的使用与封装
Mar 20 Javascript
VUE渲染后端返回含有script标签的html字符串示例
Oct 28 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
Aug 28 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
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
2017/10/26 Javascript
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
深入浅析Python传值与传址
2018/07/10 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
详解HTML5表单新增属性
2016/12/21 HTML / CSS
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
司机岗位职责
2013/11/15 职场文书
电子商务应届生求职信
2013/11/16 职场文书
六查六看剖析材料
2014/02/15 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
班主任寄语2015
2015/02/26 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL