Polymer Template

一、Ta的简介

template是polymer element中一个重要的组成部分,主要有两种使用目的,一是构建Shadow Dom,二是用于数据绑定和视图渲染。

1、可以在template里面放置css、html代码,<template>标签外的,html标记不会被渲染出来。

在这里通过link方式引入的css文件,会被放到<style shim-shadowdom-css>标签里面,简单说来就是,不区分外联,内联,都按内联处理,这个标签在head中。

样式表的前面,会被Polymer自动加上一个标记限定,如定义 .color{} 会变为 tag-name .color{}

可以通过,no-shim属性来告诉Polymer不要填充这个Style中的类容。这里对此样式不做详细介绍,放到下一篇中。

2、Javascript代码通常位于<template>标记外部,用于注册element,以及相应的逻辑处理。

形如:

(function(){

/***当拥有多个实例时,这里代码只会执行一次,可以创建私有、静态方法,缓存变量***/

Polymer(“tag-name”,{

/***每个实例创建时都会调用***/

});

})();

注意:Polymer的第二个参数会作为本标记的原型对象,故建议不要直接定义object,array类型的变量,而应该通过this关键字来指定,以避免多实例时引起非预期的效果。

template中的代码会被添加到shadow dom中,但是由template渲染出来的代码,貌似并不在shadow dom中(官方宣称在里面)。

二、常用属性

  bind

可以通过bind来为模板绑定数据源bind={{obj}},模版内可以直接访问,obj中的属性可以直接访问(作用域绑定),模板默认是可以访问本element实例对象的属性的。

  if

可以通过这个属性来指定模板按照指定的条件来渲染,if=“{{isShow}}”,如果siShow为false,那么模本将不被渲染,也就是里面的内容不会添加到dom树上

  repeat

这个功能几乎在模板系统不可或缺,通常用法为,List=Array|Object repeat=“{{item,index in List}}”

如果是Array是可以直接使用值的如{{item}},就输出数组中的元素,简单数组无需使用键值对,构建对象。如,[1,2,3],不用 写成 [{key:1},{key:2},{key:3}]

  自动节点查找

      你可以直接通过 this.$.id,这样的方式来便捷的查找节点,不用使用documnet.getElementById()/document.querySelector()来查询节点,相对效率很高。

会不会觉得这个功能很爽,的确,但是情况并不总非如此,当我们进行多级模板嵌套时,你会发现,你只能访问到本模板下的对应元素ID,

像这样的场景,

<template>

<div id="tag-box">

<template if="{{isShow}}"><polymer-tag id="tag"></polymer-tag></template>

</div>

</template>

(1、你无法通过$访问到#tag,也就意味着,在模板没有渲染完之前你无法访问到元素,domReday之后可以通过document.querySelector()来完成选取。

如:var tag=this.$["tag-box"].querySelector("#tag"); 这事通过tag.$可以访问到tag内部的元素Id。

(2、另一种方法,是不使用嵌套,而使用JS动态插入节点的方式,但是polymer对于后续插入模板中的节点,即使包含ID,也不会添加到$对象里面。

(3、还有一种方法,也不使用嵌套,

<template>

<polymer-tag id="tag" render=“bool”></polymer-tag>//这个标记不一定存在

</template>

这样可以直接访问元素,如果不需要,可以使用render来指定,不渲染element内的模板,render为自定义属性。同时从文档中应当删除<polymer-tag>节点。

这种方式的效率相对低一些,但是访问便捷。

三、模板 Special

1、部分元素中不能使用<template>标签,如<select> 和 <table>。可以使用模板属性来完成相应的操作

    <tr template repeat="{{tr in rows}}"> <td> content </td> </tr>

2、如果你的模板中存在包含src或者href的元素,请注意,这会导致一个请求,而且会得到404,在天猫做双十一的时候,就遇到了这个问题,虽然这个错误对用户不可见,但是Console中是 看得见的,我们应当避免,要自到http连接是恨影响性能的。

<img src="/users/{{ id }}.jpg">

我们,可以先将src或者href属性修改为其它属性,如lazy-src,当然,在polymer中使用的是_src,下划线+src来替代。


四、Node Bind

可以为HTML元素的属性绑定数据,这种绑定对于一些特殊的属性,textContent/value/selectIndex/checked是双向绑定,即,你修改属性会改变数据,修改数据会改变属性。

如,input.bind('value',new PathObserver(obj,'path.to.value'));完整路径为,obj.path.to.value.

  由于这个方法位于,HTMLElement上,故所有的HTML元素都具有这个方法,并且可以自定义bind方法。

五、中文乱码,脉动回来,这是福利,亲

如果你使用的是内联脚本,且,你的代码中包含中文,自然的你会看到中文乱码,

首先你会在html的meta标签中设置charset,刷一刷,靠,不行,给script标签指定一个charset,刷一刷,靠,不行。

难道是,文件的编码不对?好吧,看看,再转下编码,略带信心的刷一刷,卧槽,你懂的

究竟是怎么回事呢?好吧,话以至此,发福利吧

其实,是应为,Polymer会提取你的脚本,放到一个单独的文件中,在这个提取的过程中,发生了点什么,然后你会看到你的中文,美妙的乱了,

怎么办?这是重点,呵呵,其实也简单,外联就好了,不给Ta提取的机会,最后你会发现,中文“脉动回来了”。

以上内容为原创,转载请注明出处,欢迎大家的交流与指正。

如果你觉得对你有用,别忘了”赞一个“哦。

Polymer——Template的更多相关文章

  1. 前端组件化Polymer入门教程(8)——事件

    可以在listeners对象中监听事件 <x-custom></x-custom> <dom-module id="x-custom"> < ...

  2. 【转】Polymer API开发指南 (一)(翻译)

    原文转自:http://segmentfault.com/blog/windwhinny/1190000000592324 翻译的不好,轻拍 Polymer是google的一款前端开发框架,其基于Sh ...

  3. [Polymer] Custom Elements: Styling

    Code: <dom-module id="business-card"> <template> <div class="card" ...

  4. [Polymer] Introduction

    install Polymer and explore creating our first custom element: bower install polymer index.html: < ...

  5. 第一个Polymer应用 - (4)收尾工作

    原文链接: Step 4: Finishing touches翻译日期: 2014年7月8日翻译人员: 铁锚在本节中,会在卡片上添加收藏按钮,并可以通过切换选项卡(tabs)连接到不同的 <po ...

  6. 第一个Polymer应用 - (3)使用数据绑定

    原文链接: Step 3: Using data binding翻译日期: 2014年7月7日翻译人员: 铁锚我们创建的个人信息卡还算漂亮,但对整个应用来说,只有一张卡片看起来有点空荡荡的感觉.在本节 ...

  7. 第一个Polymer应用 - (2)创建你自己的元素

    原文链接: Step 2: Your own element翻译日期: 2014年7月6日翻译人员: 铁锚通过上一节的学习和实践, 您已经完成了一个基本的应用程序结构(application stru ...

  8. Polymer初探

    Polymer是什么? Polymer英文为 n.聚合物:多聚体 网络高分子:聚合体:高分子聚合物 应用在Web组件场景, 表达的是, 一个一个小的Web组件,可以通过此框架聚合为一个 整个页面. h ...

  9. 前端组件化Polymer深入篇(1)

    在前面的几节里面简单的介绍了一下Polymer的基本功能,但还有一些细节的东西并没有讨论,所有打算花点时间把Polymer的一些细节写一下. new和createElement有区别吗? <sc ...

随机推荐

  1. *[codility]MaxDoubleSliceSum

    https://codility.com/demo/take-sample-test/max_double_slice_sum 两个最大子段和相拼接,从前和从后都扫一遍.注意其中一段可以为0.还有最后 ...

  2. 分布式内存对象缓存系统Memcached-概述

    全面掌握Memcached 1.       概述 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,是为了加快网站http://www. ...

  3. static int和static final int的区别

    1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的区别是: 对于静态变量在内 ...

  4. 用static关键字修饰类

    Java里面static一般用来修饰成员变量或函数.但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以.被static修饰的内部类可以直接作为一个普通类来使用,而 ...

  5. PCL—低层次视觉—关键点检测(rangeImage)

    关键点又称为感兴趣的点,是低层次视觉通往高层次视觉的捷径,抑或是高层次感知对低层次处理手段的妥协. ——三维视觉关键点检测 1.关键点,线,面 关键点=特征点: 关键线=边缘: 关键面=foregro ...

  6. QTP数据驱动之读取Excel数据

    这个代码的原理是把Excel的数据当做数据库里的数据一样处理,可以对Excel用select来检索需要的数据,然后把数据以键值对的形式保存到oDict里,方便在用例层来调用 Class oDataDi ...

  7. MongoDB安装及简单实验

    1.Windows下安装MongoDB http://www.mongodb.org/downloads 下载msi,下一步下一步… 安装完毕后,到安装目录的bin目录下执行mongod启动数据库服务 ...

  8. Lua for windows中SciTe开启支持python的方法

    打开Options-Open Global Options #import python的#去掉即可

  9. POJ 2112 - Optimal Milking

    原题地址:http://poj.org/problem?id=2112 题目大意:有K个挤奶机(标号为1 ~ K)和C头奶牛(编号为K + 1 ~ K + C),以邻接矩阵的方式给出它们两两之间的距离 ...

  10. ASP.NET MVC实现多个按钮提交事件

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...