Как остановить обновление страницы sh в шаблоне Liveview - PullRequest
1 голос
/ 02 апреля 2020

Мое приложение LiveView устанавливает некоторые начальные состояния (например, button_label) в функции mount. Шаблон, по-видимому, перемонтируется при прохождении некоторых сообщений.

В следующем примере метка кнопки изначально установлена ​​на «Нажать для запуска», а когда кнопка нажата, она успешно меняется на «Выполняется ...», а затем «Все еще в прогрессе». Однако mount автоматически запускается снова, и метка возвращается к «Нажмите для запуска». Требуемое поведение заключается в том, чтобы метка оставалась «Все еще в процессе» до тех пор, пока не будет получено другое сообщение, указывающее, что процесс завершается позднее в процессе.

Что вызывает повторную установку и как я могу остановить это?

def mount(_params, _session, socket) do
   {:ok, assign(socket, button_label: "Click to run")}

def handle_event("run_process", value, socket) do
    live_view = self()

    Task.start(fn ->
      result = "Some tasks to run here"  
      send(live_view, {:in_progress, result})
    end)

    {:noreply, assign(socket, button_label: "Running..")}

def handle_info({:in_progress, result}, socket) do
    IO.inspect("result", label: "in_progress ++")
    {:noreply, assign(socket, button_label: "Still in progress")}
end


[Leex]
<button phx-click="run_process"><%= @button_label %> </button>

1 Ответ

2 голосов
/ 02 апреля 2020

@ Шроквелл на слабом канале Эликсира любезно предоставил этот ответ. Это решило мою проблему.

Попробуйте добавить атрибут type = "button" к тегу

Это предотвратит попытку отправки формы при нажатии кнопки.

[Leex]
<button type="button" phx-click="run_process"><%= @button_label %> </button>
...