浅谈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中Array 对象相关的几个方法
Dec 22 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
Apr 10 Javascript
jQuery()方法的第二个参数详解
Apr 29 Javascript
jquery实现简易的移动端验证表单
Nov 08 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
Sep 17 Javascript
angular 基于ng-messages的表单验证实例
May 04 Javascript
详解django模板与vue.js冲突问题
Jul 07 Javascript
微信小程序 授权登录详解(附完整源码)
Aug 23 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
Sep 10 Javascript
基于layui框架响应式布局的一些使用详解
Sep 16 Javascript
jquery插件懒加载的示例
Oct 24 jQuery
JavaScript TAB栏切换效果的示例
Nov 05 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
19个超实用的PHP代码片段
2014/03/14 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
jquery select下拉框操作的一些说明
2010/04/02 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
原生js实现分页效果
2020/09/23 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
python解析xml文件实例分享
2013/12/04 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
python先序遍历二叉树问题
2017/11/10 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
python字典与json转换的方法总结
2020/12/28 Python
Python用Jira库来操作Jira
2020/12/28 Python
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
平面设计自荐信
2013/10/07 职场文书
电脑租赁公司创业计划书
2014/01/08 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
火车的故事教学反思
2014/02/11 职场文书
学习教师法的心得体会
2014/09/03 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
党性分析材料格式
2014/12/19 职场文书
怎样写观后感
2015/06/19 职场文书