详解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 相关文章推荐
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
Jun 14 Javascript
js AppendChild与insertBefore用法详细对比
Dec 16 Javascript
浅析js绑定事件的常用方法
May 15 Javascript
javascript实现一个网页加载进度loading
Jan 04 Javascript
vue双向绑定简要分析
Mar 23 Javascript
Vue内容分发slot(全面解析)
Aug 19 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
Dec 25 jQuery
Node.js readline模块与util模块的使用
Mar 01 Javascript
Vue2.0 v-for filter列表过滤功能的实现
Sep 07 Javascript
VUE 自定义组件模板的方法详解
Aug 30 Javascript
js实现轮播图特效
May 28 Javascript
详解Java中String JSONObject JSONArray List转换
Nov 13 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脚本的10个技巧(1)
2006/10/09 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
php算法实例分享
2015/07/14 PHP
JS实现根据出生年月计算年龄
2014/01/10 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
javascript基础知识讲解
2017/01/11 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
webpack配置sass模块的加载的方法
2017/07/30 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
python 链接和操作 memcache方法
2017/03/04 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python实现Floyd算法
2018/01/03 Python
python 切换root 执行命令的方法
2019/01/19 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
python面向对象法实现图书管理系统
2019/04/19 Python
python能否java成为主流语言吗
2020/06/22 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
汽车工程专业应届生求职信
2013/10/19 职场文书
企业申诉管理制度
2014/01/30 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
党员评议思想汇报
2014/10/08 职场文书
万能检讨书2000字
2014/10/17 职场文书
企业安全生产检查制度
2015/08/06 职场文书
英语导游欢迎词
2015/09/30 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏