浅谈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 相关文章推荐
才发现的超链接js导致网页中GIF动画停止的解决方法
Nov 02 Javascript
jquery validate.js表单验证的基本用法入门
May 13 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 Javascript
JavaScript数据存储 Cookie篇
Jul 02 Javascript
浅谈vue.js中v-for循环渲染
Jul 26 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
May 16 Javascript
Node 搭建一个静态资源服务器的实现
May 20 Javascript
vue elementUI table 自定义表头和行合并的实例代码
May 22 Javascript
详解elementui之el-image-viewer(图片查看器)
Aug 30 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
Nov 14 Javascript
jQuery实现广告显示和隐藏动画
Jul 04 jQuery
探讨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
一个域名查询的程序
2006/10/09 PHP
PHP制作万年历
2015/01/07 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
QUnit jQuery的TDD框架
2010/11/04 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
node后端服务保活的实现
2019/11/10 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
Python列表(List)知识点总结
2019/02/18 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
is_file和file_exists效率比较
2021/03/14 PHP
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
活动志愿者自荐信
2014/01/27 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
个人德育工作总结
2015/03/05 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技