详解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.elementGetStyle(element, style)应用示例
Sep 24 Javascript
Js判断CSS文件加载完毕的具体实现
Jan 17 Javascript
javascript的日期对象、数组对象、二维数组使用说明
Dec 22 Javascript
js鼠标滑过图片震动特效的方法
Feb 17 Javascript
JS表单验证的代码(常用)
Apr 08 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
Jun 11 Javascript
vue+element的表格实现批量删除功能示例代码
Aug 17 Javascript
vue+SSM实现验证码功能
Dec 07 Javascript
JS数组去重的6种方法完整实例
Dec 08 Javascript
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
JS中的模糊查询功能
Dec 08 Javascript
Vue开发中遇到的跨域问题及解决方法
Feb 11 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 smarty的预保留变量总结
2008/12/04 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
日期 时间js控件
2009/05/07 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
js简单时间比较的方法
2016/08/02 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
Vue实现购物车详情页面的方法
2019/08/20 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
多个应用共存的Django配置方法
2018/05/30 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
深入学习python多线程与GIL
2019/08/26 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
市场营销毕业生自荐信范文
2014/04/01 职场文书
爱耳日活动总结
2014/04/30 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
分析Python list操作为什么会错误
2021/11/17 Python
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL