详解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 常用方法总结
Jun 03 Javascript
JQuery 无废话系列教程(二) jquery实战篇上
Jun 23 Javascript
js控制input输入字符解析
Dec 27 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
Vue.js基础知识小结
Jan 13 Javascript
backbone简介_动力节点Java学院整理
Jul 14 Javascript
three.js加载obj模型的实例代码
Nov 10 Javascript
JavaScript原型继承和原型链原理详解
Feb 04 Javascript
vue3.0生命周期的示例代码
Sep 24 Javascript
用webAPI实现图片放大镜效果
Nov 23 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
帅气的琦玉老师
2020/03/02 日漫
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
PHP 地址栏信息的获取代码
2009/01/07 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
python中from module import * 的一个坑
2014/07/20 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
对python中的pop函数和append函数详解
2018/05/04 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
python实现的汉诺塔算法示例
2019/10/23 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
金士达面试非笔试
2012/03/14 面试题
关于礼仪的演讲稿
2014/01/04 职场文书
收入证明怎么写
2015/06/12 职场文书
python实现简单反弹球游戏
2021/04/12 Python
配置nginx 重定向到系统维护页面
2021/06/08 Servers