Этот вопрос аналогичен (но не является точной копией) Phoenix Framework - заголовки страниц для каждого маршрута .
В идеале я хочу создавать заголовки, как в описанном вопросе, но Я использую макет root, поскольку в моем проекте используется Phoenix LiveView. Каркас HTML, включая теги head
и title
HTML, является частью шаблона root (root.html.eex
). Насколько я понимаю, шаблон приложения расширяется. Я реализовал код из приведенного выше вопроса
<title>
<%= if Kernel.function_exported?(@view_module, :title, 2) do %>
<%= @view_module.title(Phoenix.Controller.action_name(@conn), assigns) %> - StHub
<% else %>
StHub
<% end %>
</title>
и создал функцию заголовка внутри моей спецификации c page view
defmodule StHubWeb.WowsView do
use StHubWeb, :view
def title(_action, _assigns) do
"Dashboard"
end
end
, но ветвь else
кода срабатывает. При дальнейшем осмотре я думаю, что проблема связана с использованием шаблона root, потому что @view_module
при рендеринге шаблона root - StHubWeb.LayoutView
, и только внутри шаблона LayoutView/app.html.eex
@view_module
мой фактический вид (StHubWeb.WowsView
).
Я не уверен, как решить эту проблему, кроме удаления шаблона root, но тогда мой LiveView должен будет содержать весь скелет HTML все время. Возможно, у меня есть способ определить функцию заголовка в моем LayoutView
, которая будет извлекать заголовок из StHubWeb.WowsView
, но я не уверен, как это сделать.
Спасибо за помощь!