我正在创建一个聊天应用,但我有一堆频道消息。这是其中之一:
def handle_in("read", %{ "chat_id" => chat_id }, socket) do
user_id = socket.assigns[:id]
ts = DateTime.utc_now
case ChatManager.mark_as_read({user_id, chat_id, ts}) do
{:ok, chat_user} ->
last_read_at_unix = chat_user.last_read_at |> TimeConverter.ecto_to_unix
{:reply, {:ok, %{ chat_id: chat_id, last_read_at: last_read_at_unix }}, socket}
{:error, changeset} ->
{:reply, {:error, %{errors: changeset.errors}}, socket}
end
end
我可以使用凤凰视图来分隔我的演示/响应逻辑吗?这样我就可以快速转到视图文件并查看每条消息返回的内容。
答案 0 :(得分:3)
Phoenix Views只是其中包含功能的普通模块。
您可以直接调用这些功能:
MyApp.Web.ChatView.render("message.json", %{message: my_message})
或使用Phoenix.View
函数调用视图的render/2
函数:
Phoenix.View.render_one(MyApp.Web.ChatView, "message.json", message: my_message)
如果您的参数更具动态性(例如,如果您将Phoenix.View
作为消息传递),nil
函数会有一些优势。
有关这些便利功能的详细信息,请参阅Phoenix.View documentation。
构建大型应用程序时,为所有模型设置.json
模板是有意义的,因为您需要在API响应中传递json,作为消息队列中的通道消息或序列化消息。您已经编写的视图可以在所有这些情况下重复使用。