как обновить LiveComponent из LiveView Phoenix - PullRequest
0 голосов
/ 20 июня 2020

У меня LV как ..

page_live.ex

defmodule EverdeployWeb.PageLive do
  use EverdeployWeb, :live_view

  def mount(_params, session, socket) do
    if connected?(socket), do: send(self(), :add_branches)
    {:ok, assign(socket, current_user: session["current_user"], evercam_server_branches: [], loading: true)}
  end

  def handle_info(:add_branches, socket) do
    {:noreply, assign(socket, evercam_server_branches: Github.branches("evercam-server2"), loading: false)}
  end
end

и в html .leex у меня есть

<section id="cd-timeline" class="cd-container">
  <%= if @loading, do: "loading", else: "" %> 
  <%= for branch <- @evercam_server_branches do %>
    <%= live_component @socket, Server, id: branch.sha, branch: branch %>
  <% end %>
</section>

В Server LiveComponent У меня

<div class="cd-timeline-block">
  <div class="cd-timeline-img cd-picture">
    loading
  </div>

  <div class="cd-timeline-content">
    <h2><%= @branch.branch_name %></h2>
    <p>loading</p>
    <a href="#0" class="cd-read-more">Deploy</a>
    <span class="cd-date">loading</span>
  </div>
</div>

Поскольку LV будет монтировать и отправлять evercam_server_branches на :live_view, я отображаю только branch_name, остальные значения будут получены другим методом.

Это в основном Github.branch(repo, branch) Но я не уверен, где вызвать этот метод и обновить все значения, которые сейчас загружаются на Server, и я обновлю их значениями, возвращаемыми из метода branch/2.

Как в начале при загрузке :live_view. Я просто хочу показать экран с именем ветки и значками загрузки, а затем после получения значений branch/2 обновите сервер.

Я ищу способ, как я могу что-то здесь назвать

defmodule Server do
  use Phoenix.LiveComponent

end

и обновить значения Server?

1 Ответ

0 голосов
/ 24 июня 2020

Вы можете вызвать функцию обновления с таймером в "mount", проверьте:

https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#connected? / 1-examples

далее, вам нужно обновить каждый компонент через send_update/2 https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#send_update / 2

...