浅谈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 相关文章推荐
正则表达式语法
Oct 09 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
Dec 29 Javascript
JQuery中层次选择器用法实例详解
May 18 Javascript
简单的js计算器实现
Oct 26 Javascript
vue中用H5实现文件上传的方法实例代码
May 27 Javascript
angularjs下拉框空白的解决办法
Jun 20 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
Aug 13 Javascript
JS跨域请求的问题解析
Dec 03 Javascript
移动端如何用下拉刷新的方式实现上拉加载
Dec 10 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
Oct 27 Javascript
vue+iview使用树形控件的具体使用
Nov 02 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
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
浅谈React高阶组件
2018/03/28 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
python写xml文件的操作实例
2014/10/05 Python
进一步理解Python中的函数编程
2015/04/13 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
后勤人员岗位职责
2013/12/17 职场文书
意向书范文
2014/03/31 职场文书
《画》教学反思
2014/04/14 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
个人工作总结范文2014
2014/11/07 职场文书
工人先进事迹材料
2014/12/26 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
离婚案件答辩状
2015/05/22 职场文书
高中家长意见怎么写
2015/06/03 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL