详解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 相关文章推荐
dreamweaver 安装Jquery智能提示
Apr 02 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
May 08 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 Javascript
js实现的下拉框二级联动效果
Apr 30 Javascript
基于Bootstrap3表格插件和分页插件实例详解
May 17 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
微信小程序 navbar实例详解
May 11 Javascript
Node 代理访问的实现
Sep 19 Javascript
JS代码检查工具ESLint介绍与使用方法
Feb 04 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
Aug 14 Javascript
js正则匹配markdown里的图片标签的实现
Mar 24 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
浅析Yii2中GridView常见操作
2016/04/22 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python try except 捕获所有异常的实例
2018/10/18 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
python标准库os库的函数介绍
2020/02/12 Python
golang/python实现归并排序实例代码
2020/08/30 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
运动会领导邀请函
2014/02/05 职场文书
自荐信如何制作?
2014/02/21 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
文明社区申报材料
2014/08/21 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
检讨书范文大全
2015/05/07 职场文书
Python几种酷炫的进度条的方式
2022/04/11 Python