Phoenix Framwork LiveView替换了所有内容

问题描述

我正在尝试使用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 (将#修改为@)