详解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 prototype属性使用说明
May 13 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
Mar 04 Javascript
jQuery Dialog对话框事件用法实例分析
May 10 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
Nov 18 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
Nov 30 Javascript
gulp教程_从入门到项目中快速上手使用方法
Sep 14 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
Jan 06 Javascript
vue轻量级框架无法获取到vue对象解决方法
May 12 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
在vue中使用console.log无效的解决
Aug 09 Javascript
浅谈vue.watch的触发条件是什么
Nov 07 Javascript
javascript之Object.assign()的痛点分析
Mar 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
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
列表内容的选择
2006/06/30 Javascript
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
python爬虫实例详解
2018/06/19 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
python输出带颜色字体实例方法
2019/09/01 Python
Python获取时间戳代码实例
2019/09/24 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
跑吧孩子观后感
2015/06/10 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
党组织结对共建协议书
2016/03/23 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android