在 Elixir 中切换 true 和 false
toggle between true and false in Elixir
我是 Elixir 的新手,正在尝试像 JS 一样在 true
和 false
值之间切换,但我认为这是不可能的。有简单的方法吗?
在组件
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
是一个原子,而不是布尔值,因此 !: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
的值定义 class
我是 Elixir 的新手,正在尝试像 JS 一样在 true
和 false
值之间切换,但我认为这是不可能的。有简单的方法吗?
在组件
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
是一个原子,而不是布尔值,因此 !: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