Elixir / Phoenix:对频道的看法?

时间:2017-07-28 01:51:40

标签: 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_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

我可以使用凤凰视图来分隔我的演示/响应逻辑吗?这样我就可以快速转到视图文件并查看每条消息返回的内容。

1 个答案:

答案 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,作为消息队列中的通道消息或序列化消息。您已经编写的视图可以在所有这些情况下重复使用。