Polymer elementのチュートリアルに沿ってやってみました。
日本語意訳しています。
Step By Step
icon-toggleコンポーネントを作る事で勧めていきます。
最初にPolymerを使わない環境から初めて、徐々にPolymerを使うコードに変えていきます。
Step 1: Set up
以下の内容に沿って勧めます。
Step 1: Set up - Polymer Project
3つの内ステップから成ってます。
- Polymer CLI.のインストール
- 演習用コードのダウンロード
- デモの開始
それではさっそくやっていきます。
1. Polymer CLI.のインストール
npm install -g polymer-cli
2. 演習用コードのダウンロード
git clone https://github.com/PolymerLabs/polymer-3-first-element.git
cd polymer-3-first-element
npm install
3. デモの開始
polymer serve --open
以下の画面が出たらOK。
表示されるメッセージは、まだPolymer使ってませんよという意味あい。
Step 2: Add shadow DOM
Step 2: Add shadow DOM - Polymer Project
このステップ2も、3つの内ステップから成ってます。
- code を見てみよう
- custom element の追加
- styleの変更
1. code を見てみよう
トップレベルに存在するicon-toggle.jsの説明からです。
このicon-toggle.jsが<icon-toggle>というカスタムエレメントを構成するファイルとなります。
icon-toggle.jsについて
- 
@polymer/polymer/polymer-element.js 
 これはモジュールセパレーターで、Polymer CLI がモジュールのパスを解決してくれます。
- 
iron-icon.js 
 既存のPolymer要素<iron-icon>の定義。これは<icon-toggle>として後程使用します。
- 
icon-toggle.js 
 PolymerElement基本クラスを拡張する新しいクラスIconToggleを定義します。
PolymerElement基本クラス
icon-toggle.jsでは、PolymerElementクラスを基底にクラスIconToggleを定義しています。
class IconToggle extends PolymerElement {
  ...
}
Polymer 3.0では、ES6クラスの構文が使用されています。
PolymerElementには、shadow DOM、データ、イベント等、 'custom element'の開発に役立つさまざまな機能を持っています。
テンプレートの定義
Polymer 3.0では、static getter関数を使用してテンプレートを定義します。
static get template() {
  return html`
    <style>
    略
    </style>
    <span>Not much here yet.</span>
  `;
}
クラスコンストラクタのオーバーライド
constructor() {
  super();
}
コンストラクタを使う(オーバーライドする)場合は、必ず最初でsuper()を呼ぶ必要があります。
サンプルのこのコンストラクタ処理では、特に何もしていません。
custom elementを登録する
IconToggle のクラス定義の後に、IconToggleをレジスト(登録)する処理を行います。
customElements.define('icon-toggle', IconToggle);
このコードは、<icon-toggle>として、Webブラウザで使えるようにします。
2. custom element の追加
実際にcustom element (<icon-toggle>) を使っていきます。
icon-toggle.jsのspanタグをiron-iconに変更します。
<span>Not much here yet.</span>
 ↓
<iron-icon icon="polymer"></iron-icon>
画面をリロードすると以下のように'Not much here yet.'がアイコンに変わったと思います。
この例では、"polymer"アイコンを使うように指定されてます。
いともあっさりcustom elementを使うことができました。
3. Styleの変更
icon-toggle.js でのIconToggleでは2つのCSSスタイルが含まれています:
<style>
span {
  color: blue;
}
:host {
  display: inline-block;
}
</style>
スタイルの説明
- span: <icon-toggle>に内包される<span>に対するスタイル定義
- host:<icon-toggle>自体自体のスタイル定義
先ほど、<span>を<iron-icon>に変更したので<style>ブロックを次のコードに置き換えます。
<style>
  :host {
    display: inline-block;
  }
  iron-icon {
    fill: rgba(0,0,0,0);
    stroke: currentcolor;
  }
  :host([pressed]) iron-icon {
    fill: currentcolor;
  }
</style>
※ host([pressed]) iron-icon
host() ではかっこ内の属性にマッチした場合にStyleが適用されます。
リロードすると以下のような画面になるはずです。
demo-element.js中DemoElementでpressed属性が設定されているものと、されていないものがあるので、白と黒で表示されています。
しかし、クリックしてもボタンボタンに変化がありません。
これは クリック処理のコードがまだ設定してないからです。
クリック処理に関しては次の章で説明していきます。
総括
ここまででicon-toggle.jsは以下のようになっていると思います。
import { PolymerElement, html } from '@polymer/polymer/polymer-element.js';
import '@polymer/iron-icon/iron-icon.js';
class IconToggle extends PolymerElement {
  static get template() {
    return html`
      <style>
        :host {
          display: inline-block;
        }
        iron-icon {
          fill: rgba(0,0,0,0);
          stroke: currentcolor;
        }
        :host([pressed]) iron-icon {
          fill: currentcolor;
        }
      </style>
      <!-- shadow DOM goes here -->
      <iron-icon icon="polymer"></iron-icon>
    `;
  }
  constructor() {
    super();
  }
}
customElements.define('icon-toggle', IconToggle);
その2へ続く
ソースは以下に保存しました。
sugasaki/polymer-3-first-element-tutorial


