YT
Size: a a a
YT
LL
div
-ы, а это изменяет DOM
. У тебя инпуты находятся в одном диве с генерируемой частью - это точно нужно изменить, ещё нужно определить phx-update
и дать дивам их id
и name
и всё такое<form phx-submit="submit" phx-throttle="2000">
<input
type="text"
name="userinput"
>
<label>Logged as <%= @myname %></label>
</form>
<div id="chat-messages" name="div" phx-update="append">
<%= for message <- @messages do %>
<div id="msgid<%= message.id %>">
<p>
<span><%= message.author %>: </span>
<%= for line <- message.text do %>
<%= line %> <br>
<% end %>
</p>
</div>
<% end %>
</div>
M
name
и expire
в сокет при апйдете форме и читай в форму из сокетов и резетай когда произошел сабмит. YT
name
и expire
в сокет при апйдете форме и читай в форму из сокетов и резетай когда произошел сабмит. YT
M
phx-change="check"
у тебя шлются ивенты при вводе сюда, сохраняй что пользователь вверх тутM
<input type="text" name="name" value="@name" />
и возращай тутM
M
YT
YT
YT
M
M
handle_info(:update, %{assigns: assigns} = socket)
в маунте?YT
YT
YT
div
-ы, а это изменяет DOM
. У тебя инпуты находятся в одном диве с генерируемой частью - это точно нужно изменить, ещё нужно определить phx-update
и дать дивам их id
и name
и всё такое<form phx-submit="submit" phx-throttle="2000">
<input
type="text"
name="userinput"
>
<label>Logged as <%= @myname %></label>
</form>
<div id="chat-messages" name="div" phx-update="append">
<%= for message <- @messages do %>
<div id="msgid<%= message.id %>">
<p>
<span><%= message.author %>: </span>
<%= for line <- message.text do %>
<%= line %> <br>
<% end %>
</p>
</div>
<% end %>
</div>
VS
def handle_info(:update, %{assigns: assigns} = socket) do
%{activities: activities} = assigns
new_activities = Enum.map(activities, &update_activity/1)
:ok = schedule_update()
{:noreply, assign(socket, :activities, new_activities)}
end
handle_event("add", ..)
должен быть, а не handle_info
и он тут еще будет "check" на каждую букву генеритьYT
handle_event("add", ..)
должен быть, а не handle_info
и он тут еще будет "check" на каждую букву генеритьYT
defmodule HelloWeb.TestLive do
use HelloWeb, :live_view
@impl true
def mount(_params, _session, socket) do
:ok = schedule_update()
{:ok, assign(socket, :activities, [])}
end
@impl true
def handle_event("check", params, socket) do
IO.puts("CHECKING: #{inspect params}")
{:noreply, socket}
end
@impl true
def handle_event("add", params, %{assigns: assigns} = socket) do
IO.puts("ADDING: #{inspect params}")
expire = String.to_integer(params["expire"])
name = (params["name"])
activity = %{total_time: expire, remaining_time: expire, name: name}
activities = [activity | Map.get(assigns, :activities)]
{:noreply, assign(socket, :activities, activities)}
end
def handle_info(:update, %{assigns: assigns} = socket) do
%{activities: activities} = assigns
new_activities = Enum.map(activities, &update_activity/1)
:ok = schedule_update()
{:noreply, assign(socket, :activities, new_activities)}
end
defp update_activity(%{remaining_time: 0} = activity), do: activity
defp update_activity(activity) do
Map.update!(activity, :remaining_time, &(&1 - 1))
end
defp schedule_update() do
Process.send_after(self(), :update, 1_000)
:ok
end
end