我想在模板form.html.eex中识别来自new.html.eex或edit.html.eex的操作。
我想换一下纽扣标签。
<% if @action == :create do %>
<%= submit "NEW" %>
<% else %>
<%= submit "UPDATE" %>
<% end %>发布于 2018-02-08 01:55:16
你在找Phoenix.Controller.action_name(@conn)。
当然,您可以在您的控制器中将其作为@action传递给模板:
conn
|> assign(:action, action_name(conn))
# ...
|> render(...)但是如果您经常使用它,您可以覆盖lib/_web.ex中的action函数:
def controller do
quote do
# ...
def action(conn, _) do
action = action_name(conn)
conn = conn
|> assign(:action, action)
apply(__MODULE__, action, [conn, conn.params])
end
end
end发布于 2018-02-08 10:19:54
您可以从模板中传入。实际上,您可以根据需要传递任意多个键/值对。
例如,您的templates/user/edit.html.eex可能如下所示:
<h2><%= gettext("Edit user") %></h2>
<%= render "form.html", changeset: @changeset,
is_admin?: @is_admin?, user: @user, lang_select: @lang_select,
action: user_path(@conn, :update, @user) %>
<%= link gettext("Back"), to: user_path(@conn, :show, @user) %>您只需再传入一个键/值对即可。由于@action是由菲尼克斯生成器创建的表单操作,因此您可以将您的表单命名为submit_text或任何对您有意义的名称。在表单模板内部,它将如下所示:
<%= submit @submit_text %>
https://stackoverflow.com/questions/48667479
复制相似问题