问题描述
我正在尝试使用Phoenix LiveView构建实时股票视图。 我得到了新数据,并且它也在数据库中得到了更新。 问题是当有10只股票,其中一只得到更新,仅显示更新的一只。以下是相关的代码段。我正在使用PubSub系统发送/接收事件。
@impl true
def mount(_params,_session,socket) do
if connected?(socket),do: Stockview.subscribe()
{:ok,assign(socket,:stocks,Stockview.list_stocks()),temporary_assigns: [stocks: []]}
end
@impl true
def handle_info({:stock_updated,stock},socket) do
{:noreply,update(socket,fn stocks ->
[stock | stocks]
end)}
end
检查“库存”列表时为空。
对象“ stock”看起来像这样:
%EzStocks.Stockview.Stock{
__meta__: #Ecto.Schema.Metadata<:loaded,"stocks">,ask_price: 178.38,id: 26,inserted_at: ~N[2020-10-08 01:26:20],isin: "US5949181045",name: "MICROSOFT CORP",sell_price: 178.2,updated_at: ~N[2020-10-08 10:52:18]
}
我的渲染模板:
<h1>Listing Stocks</h1>
<%= if @live_action in [:new,:edit] do %>
<%= live_modal @socket,EzStocksWeb.StockLive.FormComponent,id: @stock.id || :new,title: @page_title,action: @live_action,stock: @stock,return_to: Routes.stock_index_path(@socket,:index) %>
<% end %>
<table>
<thead>
<tr>
<th>Name</th>
<th>ISIN / WKN</th>
<th>Ask price</th>
<th>Sell price</th>
<th></th>
</tr>
</thead>
<div id="st">
<tbody id="stocks">
<div id="stocks" phx-update="prepend">
<%= for stock <- @stocks do %>
<p id="<%= stock.id %>">
<tr id="stock-<%= stock.id %>">
<td><%= live_redirect stock.name,to: Routes.stock_show_path(@socket,:show,stock) %></td>
<td><%= stock.isin %></td>
<td><%= stock.ask_price %></td>
<td><%= stock.sell_price %></td>
</p>
<td>
<span><%= link "Delete",to: "#",phx_click: "delete",phx_value_id: stock.id %></span>
</td>
</tr>
<% end %>
</div>
</tbody>
</div>
</table>
<span><%= live_patch "New Stock",to: Routes.stock_index_path(@socket,:new) %></span>
我想更新数据并查看完整列表,而不仅仅是更新的对象。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)