详解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入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
JS对象与JSON格式数据相互转换
Feb 20 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
Nov 07 Javascript
js Array操作的最简短最容易理解方法
Dec 09 Javascript
JS将光标聚焦在文本最后的实现代码
Mar 28 Javascript
Bootstrap每天必学之前端开发框架
Nov 19 Javascript
JavaScript性能优化之小知识总结
Nov 20 Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 Javascript
漂亮实用的页面loading(加载)封装代码
Feb 03 Javascript
详解Angular6学习笔记之主从组件
Sep 05 Javascript
jquery树形插件zTree高级使用详解
Aug 16 jQuery
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文件上传类完整实例
2016/05/14 PHP
PHP多维数组排序array详解
2017/11/21 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
prototype 的说明 js类
2006/09/07 Javascript
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
基于jQuery实现网页打印功能
2015/12/01 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
node.js入门学习之url模块
2017/02/25 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
python修改操作系统时间的方法
2015/05/18 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
Flask框架通过Flask_login实现用户登录功能示例
2018/07/17 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
JMS中Topic和Queue有什么区别
2013/05/15 面试题
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
工地质量标语
2014/06/12 职场文书
中学生检讨书范文
2014/11/03 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
离职信范本
2015/06/23 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python