Elixir 长生不老药/凤凰:频道视图?
我正在创建一个聊天应用程序,我有一大堆频道信息。以下是其中之一:Elixir 长生不老药/凤凰:频道视图?,elixir,phoenix-framework,Elixir,Phoenix Framework,我正在创建一个聊天应用程序,我有一大堆频道信息。以下是其中之一: 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_
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
我可以使用phoenix视图分离我的演示/响应逻辑吗?这样,我可以快速转到视图文件,查看每条消息返回的内容。Phoenix视图只是普通模块,其中包含函数 您可以直接调用这些函数:
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)
如果参数更具动态性(例如,如果将nil
作为消息传递),那么Phoenix.View
函数有一些优势
有关这些便利功能的详细信息,请参阅
在构建大型应用程序时,为所有模型提供
.json
模板是有意义的,因为您需要在API响应中传递json,作为通道消息或消息队列中的序列化消息。您已经编写的视图可用于所有这些情况。是的,您可以在频道中使用Phoenix视图。只需调用MyView.render…只需一个注释,使用Phoenix.View.render/3
返回一个类似{:safe,binary_data}
的元组,您不能直接将其导入客户端。如果您想要直接输出,请使用Phoenix.View.render_to_string/3
或Phoenix.View.render_to_iodata/3
。值得注意的是,虽然我在呈现json时没有观察到这种行为。我认为在视图中使用render
是可以的,但当您需要原始字符串时,您应该知道这一点。不过我不确定。