详解JavaScript的Polymer框架中的通知交互


Posted in Javascript onJuly 29, 2015

Polymer 以访问器属性的形式来定义有监听需求的属性(没有监听需求的属性依然是普通的属性形式定义)。模板中还可以采用「::」语法来将属性双向同步于目标元素的某个事件,这就是 Angular 中双向绑定的概念,甚至还要比它更纯粹、更贴近原理。

在 properties 中定义的属性如果没有添加 notify 并且没在模板中用到,那么它就是没有监听需求的,于是就会被定义成普通属性。否则都会被定义成访问器属性,下面例子就解释了这个问题
运行

<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>
  <h1>[[z]]</h1>
 </template>
 <script>
  Polymer({
   is: 'demo-test',
   properties: {
    x: { value: 'x' },
    y: { value: 'y', notify: true }
   },
   ready: function() {
    console.log(Object.getOwnPropertyDescriptor(this, 'x'));
    console.log(Object.getOwnPropertyDescriptor(this.__proto__, 'y'));
    console.log(Object.getOwnPropertyDescriptor(this.__proto__, 'z'));
   }
  });
 </script>
</dom-module>

<demo-test></demo-test>

设置了 notify 为 true 的属性在其发生变化时会产生一个「属性名-changed」事件。注意属性名和 changed 中间用横杆链接,并且 changed 是过去时态,而不是 change 原形。Polymer 可以使用 listeners 来添加事件监听,但不能直接绑定到函数上,而必须绑定到某个属性名上(我不明白为什么要这么设计)。
运行

<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>
  <h1>[[i]]</h1>
 </template>
 <script>
  Polymer({
   is: 'demo-test',
   properties: {
    i: { value: 0, notify: true }
   },
   ready: function() {
    setInterval(function(that) {
     that.i++; 
    }, 100, this);
   },
   listeners: {
    'i-changed': 'iChangeHandler'
   },
   iChangeHandler: function(event) {
    console.log(event.detail.value);
   }
  });
 </script>
</dom-module>

<demo-test></demo-test>

事件可以在模板中使用「::」语>法来捕获,而且这些事件包括了上面产生的通知事件和用户主动触发的交互事件。
运行

<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>
  <input value="{{text::input}}" /><hr/>
  <textarea value="{{css::input}}"></textarea><hr/>
  <h1 style$="[[css]]">[[text]]</h1>
 </template>
 <script>
  Polymer({ is: 'demo-test' });
 </script>
</dom-module>

<demo-test></demo-test>

详解JavaScript的Polymer框架中的通知交互

 注意上面是 style$="[css]" 而不是直接的 style="css",因为此处是赋值给元素的 attribute 上,而不是纯粹的 property 赋值。所以在等号前面加一个「$」(其实我觉得这个语法看起来非常奇怪)。

以上这些就是我所知道的 Polymer 中所有关于数据绑定的内容了。也许有遗漏,可能会在其它文章中补充。

Javascript 相关文章推荐
javascript高亮效果的二种实现方法
Sep 14 Javascript
js 深拷贝函数
Dec 04 Javascript
JavaScript 格式字符串的应用
Mar 29 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
Mar 03 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
Jul 31 Javascript
JS实现QQ图片一闪一闪的效果小例子
Jul 31 Javascript
JS网页在线获取鼠标坐标值的方法
Feb 28 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 jQuery
JavaScript反弹动画效果的实现代码
Jul 13 Javascript
基于jquery实现多选下拉列表
Aug 02 jQuery
解决JS表单验证只有第一个IF起作用的问题
Dec 04 Javascript
原生js+canvas实现下雪效果
Aug 02 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
Jul 29 #Javascript
浅谈JavaScript的Polymer框架中的事件绑定
Jul 29 #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
You might like
PHP4 与 MySQL 交互使用
2006/10/09 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
JavaScript 反科里化 this [译]
2012/09/20 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
django从请求到响应的过程深入讲解
2018/08/01 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
python中的数据结构比较
2019/05/13 Python
Python面向对象进阶学习
2019/05/21 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
Django URL参数Template反向解析
2020/11/24 Python
社区活动邀请函范文
2014/01/29 职场文书
关于旷工的检讨书
2014/02/02 职场文书
国旗下的演讲稿
2014/05/08 职场文书
献爱心标语
2014/06/21 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
新兵入伍心得体会
2014/09/04 职场文书
财务会计实训报告
2014/11/05 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
统计员岗位职责范本
2015/04/14 职场文书
离职信范本
2015/06/23 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
分享Python获取本机IP地址的几种方法
2022/03/17 Python