Polymer
是在 Google I/O 2013
发布的一个新的 Web UI
框架。Polymer
的核心原则是 “Everything is an element”
。它是一款实用、基于事件驱动、封装性和互操做性强的 Web UI
开发框架。javascript
在了解 Polymer
以前,若是你没有了解过 Web Components
,推荐去了解下 Web Components
规范。能够经过 Web Components Wiki
了解,Polymer 用到的有 Shadom Dom
,Custom Elements
,HTML Imports
等 Web Components
技术。html
Polymer
提供几种方式安装源码。java
Bower 安装,推荐使用此方法安装。若是您对bower
不熟悉,能够自行Google
了解。若是已经安装bower
,可使用命令直接安装:bower install --save Polymer/polymer
git
直接下载zip
包,zip下载地址。github
GitHub Polymer
源码,Polymer连接。web
Polyer
支持建立自定义元素,在外部看来就像其余的 DOM 元素,可是在内部,提供便利的数据绑定和其余丰富的功能,使用更加少的代码,构建复杂的应用。
建立一个新的 Polyer
元素,须要:express
Polymer
核心组件,polymer.html
<polymer-element>
声明自定义元素下面例子,将建立一个名字为 my-element
的元素:数组
<link rel="import" href="../bower_components/polymer/polymer.html"> <polymer-element name="my-element"> <template> <span>This is element content</span> </template> <script> Polymer({ ready: function() { //... }}) </script> </polymer-element>
Polymer
元素主要由俩部分构成,<template>
和<script>
,其中<template>
是Polymer
元素的HTML
模板,<script>
是模板对应的 javascript
代码。
注意到<script>
标签中的Polymer
构造方法,Polymer
构造方法是一个对document.registerElement
的包装,而且提供一些特殊的功能,好比数据绑定和事件映射,Polymer
构造方法接受一个对象参数,定义该元素的prototype
。
有些 Polymer
元素并不须要 javascript
代码,可使用noscript
属性声明:浏览器
<polymer-element name="my-element" noscript> ... </polymer-element>
你能够在这里查看Polymer
的 API 。框架
定义好本身的 Polymer
元素以后,就能够经过import
的方式引入它(经过import
引入的文件,即便引入屡次,浏览器也只会请求一次。)。在 HTML
代码中引入自定义的元素而且使用它。首先须要引入 webcomponents.js
依赖。
<!DOCTYPE html> <html> <head> <script src="webcomponents.js"></script> <link rel="import" href="/elements/my-element/my-element.html"> </head> <body> <my-element></my-element> </body> </html>
遵循Everything is an element
的原则,在HTML
页面中,咱们会不多看到须要写一些 javascript
代码,这样就使得HTML文件代码看起来很清爽。
虽然上面例子看起来只有短短几行简单的代码,可是Polymer
支持建立丰富的可复用的组件,其中Polymer
官网就提供许多供使用和学习的基础组件core-elements
和paper-elements
。
在Polymer
可使用Shadow DOM
从模板中分离视图内容,建立一个使用Shadow DOM
的template
十分简单,使用 <content></content>
来选择须要替换的元素便可。
<polymer-element name="my-element" noscript> <template> <span>This is content: </span> <content select="q"></content> </template> </polymer-element>
使用的时候,只须要在Polymer
标签内部嵌入Light DOM
。
<my-element> <q>Hello World</q> <!--Light DOM--> </my-element>
Polymer
使用CSS Flexbox
定义了一系列基础布局样式。具体能够点击这里查看。
只须要简单的在标签上引入布局属性就能够轻松使用。
<div horizontal layout> <div>A</div> <div>B</div> <div>C</div> </div>
Polymer
支持在模板中使用{{}}
执行javascript
表达式,基础支持有:
foo
、match.set.game
array[i]
!
+i
,-a
+
,-
,*
,/
,%
==
,<
,>
,<=
,>=
,!=
,===
,!==
foo && bar
,foo || bar
a ? b : c
(a + b) * (c + d)
(数字、字符,null,undefined)
。[foo, 1]
,{id: 1, foo: bar}
reverse(my_list)
Polymer
还支持如下表达式:
{{a + b}}
的方式,也可使用以下方式处理比较复杂的计算:<link rel="import" href="../bower_components/polymer/polymer.html"> <polymer-element name="my-element" > <template> <span>The result is {{result}}</span> </template> <script> Polymer({ computed: { result: '1 + 100' } }) </script> </polymer-element>
Polymer
提供多种数据绑定方法。
单模板实例。使用bind
属性绑定一个对象到模板实例,详见。
<template> <template bind="{{person}}"> He's name is {{name}}. </template> </template>
还可使用as
为对象建立一个命名空间:
<template> <template bind="{{person as p}}"> He's name is {{p.name}}. </template> </template>
模板迭代。使用repeat
属性迭代,详见:
<template> <template repeat="{{user in users}}"> {{user.name}} </template> </template>
条件绑定
使用if
属性有条件的绑定模板实例:
<template> <template if="{{conditional}}"> The conditional is true </template> </template>
Polymer
不只提供以上的方式绑定数据,并且提供了不少其余的方法,使得模板之间的复用十分便利。更多关于数据绑定能够查看官网API
Polymer
拥有许多基础模板和很强的组件模型。做为一款还在成长中的Web UI
框架,其不少设计思想值得学习和思考。
Coding 是个云端开发协做平台,极简的一站式开发服务包括了项目协做,代码托管,质量检测,演示部署,代码在线阅读等功能。Coding 官方博客,是团队小伙伴在开发过程当中的学习与分享,如需转载,请注明出处与做者哦 !