#phoenix-framework
#phoenix-framework
Вопрос:
У меня есть форма в phoenix, которая выглядит следующим образом
<%= form_for @changeset, Routes.post_path(@conn, :create, @post), [method: "post", multipart: true], fn f -> %>
<div class="row mt-3">
<div class="form-group col-6">
<%= input f, :title, "Title", [class: "form-control", type: "text", placeholder: "Enter Title", required: true] %>
</div>
<div class="form-group col-6">
<%= input f, :description, "Description", [class: "form-control", type: "text", placeholder: "Enter Description", required: true] %>
</div>
</div>
<div class="d-flex mt-3">
<%= submit "Create Post" %>
</div>
<% end %>
Приведенная выше форма работает нормально, теперь я хочу изменить эту форму для реализации LiveView. Итак, я сделал что-то вроде этого
<%= form_for @changeset, "#", [method: "post", multipart: true], fn f -> %>
<div class="row mt-3">
<div class="form-group col-6">
<%= input f, :title, "Title", [class: "form-control", type: "text", placeholder: "Enter Title", required: true] %>
</div>
<div class="form-group col-6">
<%= input f, :description, "Description", [class: "form-control", type: "text", placeholder: "Enter Description", required: true] %>
</div>
</div>
<div class="d-flex mt-3">
<button phx-click="create-post" phx-value="form-value">Create Post"</button>
</div>
<% end %>
Я запутался в том form-value
, что нужно отправить, чтобы я получил правильные данные формы, которые содержат title
и description
в моей handle_event
функции.
Я также пытался передать @changeset
and f
, но они отправляют правильные phx-value
, которые будут содержать мои title
and description
.
Не уверен, правильно ли я реализую форму с LiveView или это нужно сделать по-другому.
Ответ №1:
Единственное отличие здесь в том, что вы не хотите использовать анонимную функцию с form_for .
<%= form_for @changeset, "#", [phx_submit: "post", multipart: true], fn f -> %>
...
<% end %>
становится
<%= f = form_for @changeset, "#", [phx_submit: "post", multipart: true] %>
...
</form>
Содержимое анонимной функции не может быть разделено.
Ответ №2:
Это правильный способ реализации формы с помощью Phoenix liveview
<%= form_for @changeset, "#", [phx_submit: "post", multipart: true], fn f -> %>
<div class="row mt-3">
<div class="form-group col-6">
<%= input f, :title, "Title", [class: "form-control", type: "text", placeholder: "Enter Title", required: true] %>
</div>
<div class="form-group col-6">
<%= input f, :description, "Description", [class: "form-control", type: "text", placeholder: "Enter Description", required: true] %>
</div>
</div>
<div class="d-flex mt-3">
<%= submit "Create Post", phx_disable_with: "Posting..." %>
</div>
<% end %>