Elixir / Phoenix: Views for channels? -
i'm creating chat app , have bunch of channel messages. here's 1 of them:
def handle_in("read", %{ "chat_id" => chat_id }, socket) user_id = socket.assigns[:id] ts = datetime.utc_now case chatmanager.mark_as_read({user_id, chat_id, ts}) {: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
can use phoenix views separate presentation / response logic? way can go view file , see returned each message.
phoenix views normal modules functions in them.
you can either call functions directly:
myapp.web.chatview.render("message.json", %{message: my_message})
or use phoenix.view
function call render/2
function of view:
phoenix.view.render_one(myapp.web.chatview, "message.json", message: my_message)
the phoenix.view
functions have few advantages if arguments more dynamic (for example if pass nil
message).
consult phoenix.view documentation details on convenience functions.
when building large application, makes sense have .json
templates models because you'll need pass json around in api responses, channel messages or serialized messages in message queue. views you've written reusable of cases.
Comments
Post a Comment