- 論壇徽章:
- 0
|
使用 Polymer 構(gòu)建你的前端應(yīng)用
初識
Polyme 是 Google I/O 201 發(fā)布的一個新的 Web UI 框架。 Polymer 的核心原則是 Everything is an element 。它是一款實用、基于事件驅(qū)動、封裝性和互操作性強(qiáng)的 Web UI 開發(fā)框架。
在了解 Polymer 之前,如果你沒有了解過 Web Components ,推薦去了解下 Web Components 規(guī)范?梢酝ㄟ^ Web Components Wiki 了解,Polymer 用到的有 Shadom Dom , Custom Element , HTML Imports 等 Web Components 技術(shù)。
安裝 Polymer
Polyme 提供幾種方式安裝源碼。
Bower 安裝,推薦使用此方法安裝。如果您對 bower 不熟悉,可以自行 Google 了解。如果已經(jīng)安 bower ,可以使用命令直接安裝: bower install --save Polymer/polymer
直接下載 zip 包, zip下載地址 。
GitHub Polymer 源碼,Polymer鏈接。
構(gòu)建自己的 Polymer 應(yīng)用
創(chuàng)建一個 Polymer 元素
Polyer 支持創(chuàng)建自定義元素,在外部看來就像其他的 DOM 元素,但是在內(nèi)部,提供便利的數(shù)據(jù)綁定和其他豐富的功能,使用更加少的代碼,構(gòu)建復(fù)雜的應(yīng)用。
創(chuàng)建一個新的 Polye 元素,需要:
1. 引入 Polymer 核心組件, polymer.html
2. 使用 <polymer-element> 聲明自定義元素
下面例子,將創(chuàng)建一個名字為 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>
復(fù)制代碼 Polyme 元素主要由倆部分構(gòu)成, <template> 和 <script> ,其中 <template> 是 Polymer 元素的 HTML 模板, <script> 是模板對應(yīng)的 javascript 代碼。
注意到 <script> 標(biāo)簽中的 Polymer 構(gòu)造方法, Polymer 構(gòu)造方法是一個對 document.registerElement 的包裝,并且提供一些特殊的功能,比如數(shù)據(jù)綁定和事件映射, Polymer 構(gòu)造方法接受一個對象參數(shù),定義該元素的 prototype 。
有些 Polymer 元素并不需要 javascript 代碼,可以使用 noscript 屬性聲明:- <polymer-element name="my-element" noscript>
- ...
- </polymer-element>
復(fù)制代碼 你可以在這里查看 Polymer 的 API 。
使用自定義的 Polymer 元素
定義好自己的 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>
復(fù)制代碼 遵循 Everything is an element 的原則,在 HTML 頁面中,我們會很少看到需要寫一些 javascript 代碼,這樣就使得 HTML 文件代碼看起來很清爽。
雖然上面例子看起來只有短短幾行簡單的代碼,但是`Polymer`支持創(chuàng)建豐富的可復(fù)用的組件,其中`Polymer`官網(wǎng)就提供許多供使用和學(xué)習(xí)的基礎(chǔ)組件 core-elements 和 paper-elements。
更多功能
Shadow DOM
在 Polymer 可以使用 Shadow DOM 從模板中分離視圖內(nèi)容,創(chuàng)建一個使用 Shadow DOM 的 template 十分簡單,使用 <content></content> 來選擇需要替換的元素即可。- <polymer-element name="my-element" noscript>
- <template>
- <span>This is content: </span>
- <content select="q"></content>
- </template>
- </polymer-element>
復(fù)制代碼 使用的時候,只需要在`Polymer`標(biāo)簽內(nèi)部嵌入 Light DOM 。- <my-element>
- <q>Hello World</q> <!--Light DOM-->
- </my-element>
復(fù)制代碼 布局屬性
Polymer 使用 CSS Flexbo 定義了一系列基礎(chǔ)布局樣式。具體可以點擊這里查看。
只需要簡單的在標(biāo)簽上引入布局屬性就可以輕松使用。- <div horizontal layout>
- <div>A</div>
- <div>B</div>
- <div>C</div>
復(fù)制代碼 模板表達(dá)式
Polymer 支持在模板中使用 {{}} 執(zhí)行 javascript 表達(dá)式,基礎(chǔ)支持有:
- 標(biāo)示符和路徑。比如: foo 、 match.set.game
- 數(shù)組訪問。比如: array
- 非邏輯。比如: !
- 一元表達(dá)式。比如: +i , -a
- 二進(jìn)制操作。比如: + , - , * , / , %
- 比較操作。比如: == , < , > , <= , >= , != , === , !==
- 邏輯比較。比如: foo && bar , foo || bar
- 三元表達(dá)式。比如: a ? b : c
- 分組。比如:`(a + b) * (c + d)`
- 字符值 (數(shù)字、字符,null,undefined) 。
- 數(shù)組和對象。如: [foo, 1] , {id: 1, foo: bar}
- 函數(shù)。如: reverse(my_list)
Polymer 還支持以下表達(dá)式:
- 計算表達(dá)式?梢灾苯邮褂妙愃 {{a + b}} 的方式,也可以使用如下方式處理比較復(fù)雜的計算:
- <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>
復(fù)制代碼- 表達(dá)式 Scope 詳見 (請到 blog.coding.net 閱讀原文)
- Filter 表達(dá)式。使用 {{expression | filterName }} 執(zhí)行 Filter表達(dá)式,跟 Angular 的 Filter 有些類似。詳見 (請到 blog.coding.net 閱讀原文)
數(shù)據(jù)綁定
Polymer 提供多種數(shù)據(jù)綁定方法。
- 單模板實例。使用 bind 屬性綁定一個對象到模板實例,詳見 。 (請到 blog.coding.net 閱讀原文)
- <template>
- <template bind="{{person}}">
- He's name is {{name}}.
- </template>
- </template>
復(fù)制代碼 還可以使用 as 為對象創(chuàng)建一個命名空間:- <template>
- <template bind="{{person as p}}">
- He's name is {{p.name}}.
- </template>
- </template>
復(fù)制代碼 模板迭代。使用`repeat`屬性迭代, 詳見 (請到 blog.coding.net 閱讀原文) :- <template>
- <template repeat="{{user in users}}">
- {{user.name}}
- </template>
- </template>
復(fù)制代碼
使用 if 屬性有條件的綁定模板實例:- <template>
- <template if="{{conditional}}">
- The conditional is true
- </template>
- </template>
復(fù)制代碼 Polymer 不僅提供以上的方式綁定數(shù)據(jù),而且提供了很多其他的方法,使得模板之間的復(fù)用十分便利。更多關(guān)于數(shù)據(jù)綁定可以查看官網(wǎng) API
總結(jié)
Polymer 擁有許多基礎(chǔ)模板和很強(qiáng)的組件模型。作為一款還在成長中的 Web UI 框架,其很多設(shè)計思想值得學(xué)習(xí)和思考。
---
Coding 是個云端開發(fā)協(xié)作平臺,極簡的一站式開發(fā)服務(wù)包括了項目協(xié)作,代碼托管,質(zhì)量檢測,演示部署,代碼在線閱讀等功能。Coding 官方博客 ( blog.coding.net),是團(tuán)隊小伙伴在開發(fā)過程中的學(xué)習(xí)與分享,如需轉(zhuǎn)載,請注明出處與作者哦 !
|
|