JS的框架Polymer中的dom-if和is属性使用说明


Posted in Javascript onJuly 29, 2015

我们经常会有根据某个属性的取值来觉得模板渲染的需求,那就是最基本的分支语句。Angular 中有 ng-if 可以用,那么 Polymer 中当然也有 dom-if。其实 dom-if 是个很简单的东西,它只是作为本篇话题的接入点,我想介绍的实际上是 is 这个属性。

dom-if 和之前介绍过的 dom-repeat 一样,都是通过 is 属性在 tempalte 元素上使用的,比如下面这个例子就是两个模板根据一个绑定才控件上的布尔值来决定谁该被渲染
运行

<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 type="checkbox" checked="{{checked::change}}">
  <template is="dom-if" if="[[checked]]">true</template>
  <template is="dom-if" if="[[!checked]]">false</template>
 </template>
 <script>
  Polymer({
   properties: {
    checked: { value: false }
   },
   is: 'demo-test'
  });
 </script>
</dom-module>

<demo-test></demo-test>

无论是 dom-if 还是之前的 dom-repeat,这些 is 属性来指定的到底是什么呢?其实和 Angular 是一样的,它们都是 Directive 的概念,只是 Polymer 不称它为 Directive 而已。我们完全可以自己造一个这样的东西出来,比如下面例子我们给 div 元素添加一个 is="demo-test" 的东西
运行

<script> var Polymer = { dom: 'shadow' }; </script>
<base href="http://www.web-tinker.com/share/" />
<link rel="import" href="polymer/polymer.html" />

<script>
 Polymer({
  is: 'demo-test',
  extends: 'div', <!-- 关键就在这里
  ready: function(e) {
   this.innerHTML = '我是一个 demo-test';
  }
 });
</script>

<div is="demo-test"></div>

在定义时通过 extends 指定一个标签名即可得到一个 is 指令。上面例子是一个最简单的用法,我们可以自己创建 Shadow DOM 做自己想做的事了。实际上 Polymer 内置的 dom-repeat 和 dom-if 以及其他 dom-* 也都是如此定义的。但是这东西细看起来是非常复杂的,而我的文章只是入门级的东西,如果想知道更具体的用法就应该去看源码(连官方文档我也没找到在哪儿定义)。

Javascript 相关文章推荐
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
Dec 06 Javascript
javascript最常用与实用的创建类的代码
Aug 12 Javascript
js constructor的实际作用分析
Nov 15 Javascript
jquery实现的一个导航滚动效果具体代码
May 27 Javascript
js特效,页面下雪的小例子
Jun 17 Javascript
JavaScript实现按Ctrl键打开新页面
Sep 04 Javascript
JavaScript时间转换处理函数
Apr 14 Javascript
angularjs表格ng-table使用备忘录
Mar 09 Javascript
JavaScript判断用户名和密码不能为空的实现代码
May 16 Javascript
JS快速实现移动端拼图游戏
Sep 05 Javascript
js入门之Function函数的使用方法【新手必看】
Nov 22 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
Feb 10 Javascript
js数组去重的方法汇总
Jul 29 #Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
Jul 29 #Javascript
JavaScript中的cacheStorage使用详解
Jul 29 #Javascript
JavaScript中数组继承的简单示例
Jul 29 #Javascript
小议JavaScript中Generator和Iterator的使用
Jul 29 #Javascript
浅析Node.js的Stream模块中的Readable对象
Jul 29 #Javascript
浅谈Javascript数组的使用
Jul 29 #Javascript
You might like
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
javascript中直接写php代码的方法
2013/07/31 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
Javascript函数的参数
2015/07/16 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
详解JS预解析原理
2020/06/16 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
利用Python如何生成随机密码
2016/04/20 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
Python GUI编程完整示例
2019/04/04 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
《木笛》教学反思
2014/03/01 职场文书
居住证明范文
2015/06/17 职场文书
学雷锋主题班会教案
2015/08/13 职场文书