详解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 相关文章推荐
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
JavaScript的==运算详解
Jul 20 Javascript
简单三步实现报表页面集成天气
Dec 15 Javascript
详解js数组的完全随机排列算法
Dec 16 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
Aug 15 Javascript
angularjs实现简单的购物车功能
Sep 21 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
vue项目中使用tinymce编辑器的步骤详解
Sep 11 Javascript
微信小程序云开发使用方法新手初体验
May 16 Javascript
npm的lock机制解析
Jun 20 Javascript
Angular封装表单控件及思想总结
Dec 11 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
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
自制PHP框架之设计模式
2017/05/07 PHP
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
vue实现通讯录功能
2018/07/14 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Python读写docx文件的方法
2018/05/08 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
Python标准库itertools的使用方法
2020/01/17 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
Python虚拟环境venv用法详解
2020/05/25 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
高级电工工作职责
2013/11/21 职场文书
工作岗位说明书模板
2014/05/09 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
嘉宾邀请函
2015/01/31 职场文书
公司放假通知范文
2015/04/14 职场文书