浅谈JavaScript的Polymer框架中的事件绑定
程序员文章站
2022-05-20 20:56:34
既然是一套完整的前端框架那就一定有提供事件绑定相关的支持。其实在之前的例子中就使用过事件绑定,只是没有单独系统地介绍过而已。 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 如此设计的良苦用心吧?
上一篇: javascript中递归函数用法注意点
下一篇: 秋葵搭配什么吃最好?搭配禁忌有哪些?