【问题标题】:In Phoenix Liveview, how to change button labels to indicate job status在 Phoenix Liveview 中,如何更改按钮标签以指示作业状态
【发布时间】:2020-03-31 13:02:42
【问题描述】:

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

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

    (这是来自 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多