详解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 相关文章推荐
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
jQuery响应enter键的实现思路
Apr 18 Javascript
基于jQuery实现最基本的淡入淡出效果实例
Feb 02 Javascript
如何编写高质量JS代码(续)
Feb 25 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
Aug 09 Javascript
JS实现页面载入时随机显示图片效果
Sep 07 Javascript
js实现的在线调色板功能完整实例
Dec 21 Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 Javascript
Javascript实现动态时钟效果
Nov 17 Javascript
实例分析编写vue组件方法
Feb 12 Javascript
Jquery动态列功能完整实例
Aug 30 jQuery
vue中npm包全局安装和局部安装过程
Sep 03 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
WordPress判断用户是否登录的代码
2011/03/17 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
JavaScript 实现??打印?理
2007/04/28 Javascript
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
jquery each()源代码
2011/02/14 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
python中实现字符串翻转的方法
2018/07/11 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
linux面试题参考答案(6)
2016/06/23 面试题
电力公司个人求职信范文
2014/02/04 职场文书
《晏子使楚》教学反思
2014/02/08 职场文书
维稳承诺书
2015/01/20 职场文书
团代会邀请函
2015/02/02 职场文书
百年孤独读书笔记
2015/06/29 职场文书
PyMongo 查询数据的实现
2021/06/28 Python
java设计模式--原型模式详解
2021/07/21 Java/Android
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript