Chrome 開發人員高峰會 - Polymer 宣告式、封裝、可重複使用的元件

Eric Bidelman

Polymer 是為網頁元件帶來出色未來願景的門戶。我們希望協助使用者輕鬆取用及建立自訂元素,過去一年來,我們的團隊一直努力為一組 polyfill 以因應不斷變化的規格。此外,我們還建立了便利的糖果程式庫,方便您建構網頁元件。最後,我們正在打造一組可在應用程式中重複使用的 UI 和公用程式元素。在 2013 年 Chrome 開發人員高峰會中,我深入探討 Polymer 的各個部分,以及我們「一件是元素」背後的理念。

簡報http://html5-demos.appspot.com/static/cds2013/index.html

「所有都是元素」(從 <select> 到自訂元素)

投影片http://html5-demos.appspot.com/static/cds2013/index.html#6

在 1990 年代,網路世界雖然沒有限制,但仍然很強大。我們手邊只有幾個元素最強大的部分是什麼?...所有都是宣告式。建立頁面、新增表單控制項以及建立「應用程式」真的超簡單,完全不必編寫 JavaScript。

取用謙遜的 <select> 元素。只要宣告該元素,即可內建大量功能:

  • 透過 HTML 屬性自訂
  • 使用預設 UI 轉譯子項 (例如 <option>),但可透過屬性設定。
  • <form> 等其他情況下相當實用
  • 具有 DOM API:屬性和方法
  • 發生有趣的事件時啟動事件

網頁元件提供工具,讓您回到這樣的網站開發流程。我們可以建立全新元素 (回顧 <select>),但設計為 2014 的用途。舉例來說,如果今天我們發明 AJAX 內容,它可能會是 HTML 標記 (範例):

<polymer-ajax url="http://gdata.youtube.com/feeds/api/videos/"
                params='{"alt":"json"}'></polymer-ajax>

或是資料繫結至 queryMatches 屬性的回應式元素

<polymer-media-query query="max-width:640px" queryMatches="">

這就是我們採取 Polymer 的做法。與其建構以 JavaScript 為基礎的單體式網頁應用程式,我們現在要建立可重複使用的元素。長期下來,整個應用程式就會因為組合較小的元素而逐漸擴大。而整個應用程式也可以是一個元素:

<my-app></my-app>

使用 Polymer 的特殊醬料來建構網頁元件

投影片http://html5-demos.appspot.com/static/cds2013/index.html#37

Polymer 提供多種便利方式,可用來建構網頁元件型應用程式:

  • 宣告式元素登錄:<polymer-element>
  • 宣告式繼承:<polymer-element extends="...">
  • 宣告式雙向資料繫結:<input id="input" value="">
  • 宣告式事件處理常式:<button on-click=""
  • 已發布的屬性:xFoo.bar = 5 <-> <x-foo bar="5">
  • 資源觀察:barChanged: function() {...}
  • 預設 PointerEvents / PointerGestures

故事的主角是撰寫 Polymer 元素,的重點在於陳述敘事。需要編寫的程式碼越少,越越好 ;)

網頁元件:網站開發的未來

投影片http://html5-demos.appspot.com/static/cds2013/index.html#26

如果沒有明確表揚網頁元件背後的標準,我就難免會想。畢竟,Polymer 是以這些持續演進的基礎 API 為基礎。

我們在開發網站方面找到相當興奮的時光,與網路平台其他新加入的功能不同,網頁元件所使用的 API 不但沒有完善,也沒有面向使用者。而是只用於開發人員工作效率。這四個主要的 API 都各自有用,但是搭配使用起來更美好!

  1. Shadow DOM - 樣式和 DOM 封裝
  2. 自訂元素:定義新的 HTML 元素。提供含有屬性和方法的 API。
  3. HTML 匯入是 CSS、JS 和 HTML 套件的發布模型。
  4. 範本 - 適當的 DOM 範本,用於定義稍後要加上戳記的標記片段區塊

如想進一步瞭解 API 的基本概念,請前往 webcomponents.org。