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 相关文章推荐
原生js实现fadein 和 fadeout淡入淡出效果
Jun 05 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
Oct 17 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
Jul 21 Javascript
jQuery实现的自动加载页面功能示例
Sep 04 Javascript
干货!教大家如何选择Vue和React
Mar 13 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
Mar 21 Javascript
深入理解JavaScript 中的执行上下文和执行栈
Oct 23 Javascript
详解小程序不同页面之间通讯的解决方案
Nov 23 Javascript
Vue商品控件与购物车联动效果的实例代码
Jul 21 Javascript
vue解决使用$http获取数据时报错的问题
Oct 30 Javascript
在vue中动态添加class类进行显示隐藏实例
Nov 09 Javascript
详细聊聊vue中组件的props属性
Nov 02 Vue.js
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实现的验证码文件类实例
2015/06/18 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
Python解析json文件相关知识学习
2016/03/01 Python
利用Python破解斗地主残局详解
2017/06/30 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
pyhton列表转换为数组的实例
2018/04/04 Python
python简易远程控制单线程版
2018/06/20 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
在python中修改.properties文件的操作
2020/04/08 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python实例化对象的具体方法
2020/06/17 Python
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
艺术学院毕业生自我评价
2014/03/02 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
学生评语大全
2014/04/18 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
难忘的一天教学反思
2014/04/30 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
Python基础之数据类型知识汇总
2021/05/18 Python