【问题标题】:toggle between true and false in Elixir在 Elixir 中切换真假
【发布时间】:2021-07-07 00:29:22
【问题描述】:

我是 Elixir 的新手,正在尝试在 truefalse 值之间切换,例如 JS,但我认为这是不可能的。有没有简单的方法可以做到这一点?

组件中

def update(assigns, socket) do
socket
|> assign(:show_password, false)
|> reply(:ok)
end


def handle_event("show_password", _params, socket) do
socket
|> assign(:show_password, !:show_password)
|> reply(:noreply)
end

HTML

 <i class="icon-closed_eye" phx-click="show_password" phx-target="<%= @myself %>"></i>

谢谢大家

【问题讨论】:

  • 当然,如果你有以前的值,这是可能的。 :show_password 是一个原子,而不是与该原子关联的值。

标签: elixir phoenix


【解决方案1】:

确实如此,但是正如 cmets 中所述,:show_password 是一个原子,而不是布尔值,因此 !:show_password 没有多大意义。但是,您已经在套接字的:assigns 中拥有:show_password 的值。所以你可以更新它:

def handle_event("show_password", _params, socket) do
  socket
  |> assign(:show_password, !socket.assigns[:show_password])
  |> reply(:noreply)
end

甚至:

def handle_event("show_password", _params, socket) do
  socket
  |> update(:show_password, &(!&1))
  |> reply(:noreply)
end

然而,对于模板,您仍然需要使用类似条件的东西:

<%= if @show_password do %>
  <i class="icon-closed_eye" phx-click="show_password" phx-target="<%= @myself %>"></i>
<% else %>
  <i class="icon-opened_eye" phx-click="show_password" phx-target="<%= @myself %>"></i>
<% end %>

假设您还有一个 icon-opened_eye 图标。

从那里您可以找到其他改进。例如,您可以避免使用条件,而是使用辅助函数来根据 @show_password 的值定义类

【讨论】:

  • 很好的解释:) 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2018-08-11
  • 2012-09-24
  • 1970-01-01
  • 2022-11-01
相关资源
最近更新 更多