我有以下用于简单实时视图的代码,它曾经在我的另一台计算机上工作,但我似乎无法让它工作了:
defmodule ProjectWeb.CounterLive do
use Phoenix.LiveView
def mount(_session, socket) do
socket = assign(socket, :count, 0)
{:ok, socket}
end
def render(assigns) do
~L"""
<h1>Count: <%= @count %></h1>
"""
end
end
根据 Phoenix.LiveView docs:
mount(params, session, socket) @callback mount( params :: unsigned_params() | :not_mounted_at_router, session :: map(), socket :: Phoenix.LiveView.Socket.t() ) :: {:ok, Phoenix.LiveView.Socket.t()} | {:ok, Phoenix.LiveView.Socket.t(), keyword()} The LiveView entry-point.
对于模板根目录中的每个 LiveView,调用 mount/3 两次: 一次进行初始页面加载,一次建立实时 插座。
它需要三个参数:
params - 包含公共信息的字符串键映射 可以由用户设置。该地图包含查询参数以及 任何路由器路径参数。如果 LiveView 未安装在 router,这个参数是 atom :not_mounted_at_router session - the 连接会话套接字 - LiveView 套接字它必须返回 {:ok, socket} 或 {:ok, socket, options},其中 options 是以下之一:
:temporary_assigns - 临时分配的关键字列表 每次渲染后都必须重置为它们的值。请注意,一旦 值被重置,它不会被重新渲染,直到它被显式地 分配
:layout - LiveView 使用的可选布局。设置这个 选项将覆盖之前通过设置的任何布局 Phoenix.LiveView.Router.live_session/2 或正在使用 Phoenix.LiveView
...但是你定义了一个 mount/2:
def mount(_session, socket) do
socket = assign(socket, :count, 0)
{:ok, socket}
end