欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈JavaScript的Polymer框架中的事件绑定

程序员文章站 2022-10-24 18:16:15
既然是一套完整的前端框架那就一定有提供事件绑定相关的支持。其实在之前的例子中就使用过事件绑定,只是没有单独系统地介绍过而已。 polymer 的事件思想是对事件处理函数尽可...

既然是一套完整的前端框架那就一定有提供事件绑定相关的支持。其实在之前的例子中就使用过事件绑定,只是没有单独系统地介绍过而已。 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 如此设计的良苦用心吧?