使用 Phoenix 实时视图文档,我添加了一个用于编写实时表单应用程序的实时页面。有一个非常简单的演示:
<h2>Hello</h2>
Counter is222: <%= @counter %>
<hr>
<button phx-click="dec">-</button>
<button phx-click="inc">+</button>
<table border="1">
<tr>
<th contenteditable="true">Month</th>
<th>S1</th>
<th>S2</th>
</tr>
<tr>
<td contenteditable="true">January</td>
<td contenteditable="true">$100</td>
<td contenteditable="true">$10220</td>
</tr>
</table>
服务器端代码(就像文档一样):
defmodule TicTacWeb.MemberSchedulerLive do
use Phoenix.LiveView
def render(assigns) do
TicTacWeb.PageView.render("member_scheduler.html", assigns)
end
def mount(_, socket) do
{:ok, assign(socket, %{counter: 100})}
end
def handle_event("inc", _, socket) do
{:noreply, update(socket, :counter, fn(x) -> x + 1 end)}
end
def handle_event("dec", _, socket) do
IO.puts("item")
{:noreply, update(socket, :counter, fn(x) -> x - 1 end)}
end
end
问题是在我单击或向服务器发出消息<td contenteditable
后,值将被恢复。-
+
- 为什么
-
或+
影响<td>
的价值?是不是最小化修改了dom数据? - 这种场景有最佳实践吗?
谢谢!
UPDATE
将 contenteditable 添加为数据模型后,它仍然不起作用,例如:
1. html 片段
....
<td contenteditable="true">$100</td>
<td contenteditable="true" phx-blur="somedata"><%=@somedata%></td>
</tr>
</table>
- 后端
...
def mount(_, socket) do
{:ok, assign(socket, %{counter: 100, somedata: "$001"})}
end
如果单击或,@somedata
也会恢复为 $001 。-
+