Возникла проблема с настройкой стоимости через Phoenix LIVEVIEW - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь создать нормальное CRUD-приложение с использованием Phoenix.LiveView. Здесь я сталкиваюсь с проблемой при передаче или установке значения ASSIGN или IN SOCKET.

У меня есть код LiveView

Index.ex

defmodule Example.Index do
    use Phoenix.LiveView

    @default_state %{
        is_editing?: false,
        user_id: nil,
    }

    def render(assign) do
        ExampleWeb.render("index.html", assign)
    end

    def mount(_params, _session, socket) do
        users = Example.get_users()
        {:ok, assign(socket, %{@default_state | users: users})}
    end

    def handle_event("edit-user", %{"user-id" => user_id}, socket) do
        new_socket =
            socket
            |> assign(:user_id, user_id)

        {:noreply,
            live_redirect(new_socket,
            to: ExampleWeb.Router.Helpers.users_edit_path(new_socket, __MODULE__, user_id),
            replace: false
        )}
    end
end

Файл шаблона

<div class="card">
  <%= if @is_editing? do %>
    <%= live_component(@socket, ExampleWeb.Users.EditFormComponent, id: :edit_user) %>
  <%= end %>
  <%= if @is_editing? != true do %>
    <div class="card-header">
      <strong>Users</strong>
      <a class="btn btn-sm btn-success ml-3 pull-right" phx-click="new">
        <i class="fa fa-plus mr-1"></i> Create
      </a>
    </div>
   <%= end %>
</div

вот мой код component.ex

defmodule ExampleWeb.Users.EditFormComponent do
    use Phoenix.LiveComponent

    def render(assigns) do
        UserView.render("update.html", assigns)
    end

    def mount(socket) do
        {:ok, assign(socket, changeset: User.changeset(%User{}))}
    end
end

проблема здесь я не могу получить идентификатор пользователя, который установлен / обновлен в файле LiveView, а также не может получить доступ к PARAMS на уровне компонентов.

Может кто-нибудь предложить или предложить решение для этого ??

...