引き続き、Elm-Architectureのサンプルを見ていきます。
前回は、複数のカウンターを作成しました。
今回は動的なカウンターを作成します。
カウンターモジュール
カウンター自体は前回作成したものを再利用します。便利ですね。
カウンターリスト
カウンターを複数格納するカウンターリストモジュールを作成します。
モデル
まずはモデルを作成します。
gist569a849e7ef00032e65e2bb5dd286c2f
ここで、Listを用いました。これは、ユニークなIDをもつカウンターを複数格納できます。
ユニークなIDを持つので、更新のための目印となります。
さらに、nextIDという項目があり、新しいカウンターを作成する際に用いられます。
アクション
カウンターに対するアクションとして、作成・削除・更新ができるようにします。
以下が定義するアクション一覧です。
gistf0f985028d15d09b3edb2f4bc8fae194
作成
カウンターの新規作成は以下のようになります。
gistcda856b6ee73b5f31793f6390f49c736
まずは新しいカウンターを作成して、カウンターリストに追加しています。
そして、nextIDを次の作成に備えてインクリメントしています。
削除
gist98b684db8a567ccf7d312e24a15db487
削除はシンプルですね。
カウンターリストの最初のカウンターを削除します。
修正
最後に修正アクションです。
gist9b806528b851836478f6344dbc795456
全カウンターを走査して、マッチするカウンターを探します。マッチしたら、与えられたアクションを適用します。
ビュー
最後にビューを作成します。
gistccd2d22185023f8c0cc5222ce7c00e60
ここでviewCounterという関数が登場しました。
これはCounterのもつview関数を利用していますが、フォワーディングアドレスというものを与えています。フォワーディングアドレスは、レンダリング時に特定のIDを紐付ける関数です。
DEMO
http://chuck0523.github.io/JSPractise/elm/dinamyc-counter/index.html