JavaScriptを有効にしてください

【Elixir】LiveView で使用するテンプレートファイルを変更する方法

 ·  ☕ 1 分で読めます

Elixir LiveView で使用するテンプレートファイルを変更する方法

Elixir の LiveView でテンプレートファイルを変更したい場合があります。
今回は対処方法についてまとめました。

確認環境

  • Elixir 1.14.2
  • Phoenix 1.6.3

.heexファイル用ビューを追加

Viewを呼び出す用のファイルを定義します。

1
2
3
4
defmodule SampleWeb.PageView do
  use SampleWeb, :view
end

テンプレートフォルダの設定

以下のファイルにテンプレートフォルダの root が定義されていますので確認してください。
僕の環境では pattern を追加しないとサブディレクトリを読み込んでくれませんでした。

1
2
3
4
      use Phoenix.View,
        root: "lib/sample_web/templates",
        pattern: "**/*", # サブディレクトリ用の設定
        namespace: SampleWeb

フォルダとファイルを生成

1
2
3
4
mkdir lib/sample_web/templates/live/sample
echo "sample 1" > lib/sample_web/templates/live/sample/sample_1.html.heex
echo "sample 2" > lib/sample_web/templates/live/sample/sample_2.html.heex
echo "sample default" > lib/sample_web/templates/live/sample/sample_default.html.heex

値によってテンプレートファイルを変更する

準備ができたので実際にLiveViewの処理を書きます。
render/1 で使用するテンプレートファイルを振り分けます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
defmodule SampleWeb.SampleLive do
  use SampleWeb, :live_view

  @impl true
  def mount(_param, _session, socket) do
    socket = assign(socket, :param, Enum.random(1..3))
    {:ok, socket}
  end

  def render(assigns) do
    # 条件によって使用するテンプレートファイルを変更する
    cond do
      assigns.param == 1 ->
        Phoenix.View.render(SampleWeb.PageView, "live/sample/sample_1.html", assigns)

      assigns.param == 2 ->
        Phoenix.View.render(SampleWeb.PageView, "live/sample/sample_2.html", assigns)

      true ->
        Phoenix.View.render(SampleWeb.PageView, "live/sample/sample_default.html", assigns)
    end
  end
end

これで値によって違うテンプレートファイルを呼び出すことが可能です。

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer