繁体   English   中英

在 Phoenix Liveview 中,如何更改按钮标签以指示作业状态

[英]In Phoenix Liveview, how to change button labels to indicate job status

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

 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 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM