浅谈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 相关文章推荐
在多个页面使用同一个HTML片段《续》
Mar 04 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
Apr 24 Javascript
判断iframe里的页面是否加载完成
Jun 06 Javascript
基于javascript实现文字无缝滚动效果
Mar 22 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
Jan 19 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
Jun 19 Javascript
ES6扩展运算符用法实例分析
Oct 31 Javascript
基于js中的存储键值对以及注意事项介绍
Mar 30 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
Jun 12 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
Nov 30 Javascript
es6函数name属性功能与用法实例分析
Apr 18 Javascript
vscode自定义vue模板的实现
Jan 27 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封装的smarty类完整实例
2016/10/19 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
php实现简单加入购物车功能
2017/03/07 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
经验几则 推荐
2006/09/05 Javascript
js jquery做的图片连续滚动代码
2008/01/06 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
将python文件打包成EXE应用程序的方法
2019/05/22 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
会计系中文个人求职信
2013/12/24 职场文书
门面房租房协议书
2014/08/20 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
赢在执行观后感
2015/06/16 职场文书
公司仓库管理制度
2015/08/04 职场文书