首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别来自新建或在表单模板中编辑的操作。

如何识别来自新建或在表单模板中编辑的操作。
EN

Stack Overflow用户
提问于 2018-02-07 23:28:31
回答 2查看 864关注 0票数 0

我想在模板form.html.eex中识别来自new.html.eexedit.html.eex的操作。

我想换一下纽扣标签。

代码语言:javascript
复制
<% if @action == :create do %>
  <%= submit "NEW" %>
<% else %>    
  <%= submit "UPDATE" %>
<% end %>
EN

回答 2

Stack Overflow用户

发布于 2018-02-08 01:55:16

你在找Phoenix.Controller.action_name(@conn)

当然,您可以在您的控制器中将其作为@action传递给模板:

代码语言:javascript
复制
conn
|> assign(:action, action_name(conn))
# ...
|> render(...)

但是如果您经常使用它,您可以覆盖lib/_web.ex中的action函数:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-02-08 10:19:54

您可以从模板中传入。实际上,您可以根据需要传递任意多个键/值对。

例如,您的templates/user/edit.html.eex可能如下所示:

代码语言:javascript
复制
<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 %>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48667479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档