浅谈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创建子窗口并且回传值示例代码
Jul 02 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
js获得当前时区夏令时发生和终止的时间代码
Feb 23 Javascript
Eclipse引入jquery报错如何解决
Dec 01 Javascript
js+ajax实现获取文件大小的方法
Dec 08 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
Apr 11 Javascript
vue弹窗组件使用方法
Apr 28 Javascript
详解webpack编译速度提升之DllPlugin
Feb 05 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 18 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
Nov 16 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
使用Zttp简化Guzzle 调用
2017/07/02 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
django实现分页的方法
2015/05/26 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
django自定义模板标签过程解析
2019/12/14 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
JAVA和C++的区别
2013/10/06 面试题
交通专业个人自荐信格式
2013/09/23 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
面试感谢信范文
2015/01/22 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
管辖权异议上诉状
2015/05/23 职场文书