如何在Phoenix Liveview中临时更改按钮标签

问题描述 投票:0回答:1

当向assign(socket, strLabel: "Push me")之类的分配添加值时,LiveView是否更新DOM?或handle_event返回{..,socket}时?我有一个按钮,单击该按钮可从数据库读取。我希望在发生数据库读取时将按钮标签更改为“读取中...”。下面是我的尝试,但是临时标签“ Reading ..”从未出现。

 def handle_event("button_click", value, socket) do

    socket1 = assign(socket, btnLabel: "Reading..")   ##temporarily change the button label

    {:ok, data} = log_list(10000, list_name)     

    socket1 = assign(socket, btnLabel: "Press me")   ## restore original button label

    {:noreply, socket1}
  end
elixir phoenix phoenix-live-view
1个回答
0
投票

((这是Elixir Liveview Slack频道中@schrockwell的回复。)

[您需要做的是分配一个跟踪“读取”状态的赋值,就像一个简单的布尔值,并在handle_event中立即分配它,然后产生一个进行数据库查找并发送查找完成后,将消息返回LiveView流程

def handle_event("some_event", params, socket) do
   live_view = self()
   Task.start(fn ->
      result = do_the_db_lookup_here()
      send(live_view, {:db_result, result})
   end)
   {:noreply, assign(socket, busy: true)}
end

def handle_info({:db_result, result}, socket) do
  {:noreply, assign(socket, result: result, busy: false)}
end
© www.soinside.com 2019 - 2024. All rights reserved.