Исчезающий выбор после перезагрузки просмотра в реальном времени - PullRequest
1 голос
/ 01 октября 2019

У меня странная проблема с моим рендером LiveView. Вот что происходит как поток:

  1. Я выбираю любой вариант не по умолчанию из первого выбора, оставляя второй выбор по умолчанию -> Я отправляю свою форму поиска в LiveView -> На загруженном экране с новыми записями яснова выберите вариант по умолчанию для первого выбора, оставив второй выбор по умолчанию -> Я отправляю свою форму поиска в LiveView -> Второй выбор исчезает
  2. Я выбираю любой вариант не по умолчанию из второго выбора, оставляя первый выбор по умолчанию -> Я отправляюмоя форма поиска в LiveView -> На перезагруженном экране с новыми записями я снова выбираю вариант по умолчанию для второго выбора, оставляя первый выбор по умолчанию -> Я отправляю свою форму поиска в LiveView -> Первый выбор исчезает
  3. Я выбираю любойне оба варианта по умолчанию -> Я отправляю свою форму поиска в LiveView -> Я очищаю поля, отправляющие событие clear в LiveView -> Я отправляю свою форму поиска со значениями по умолчанию первого и второго выбора в LiveView -> Оба выбора исчезают

Говоря, исчезни, я действительно имею в видуисчезнуть - в элементах внутри инструментов разработчика Chrome место, где должен находиться селектор, просто пусто.

Я считаю, что проблема заключается где-то в присвоении значений полям, вот мой код для генерации селектов:

<div class="form-group col-md-3 main-search__form-group">
  <%= label f, :rent_type, gettext("Type"), class: "main-search__form-label" %>
    <%= select f, :rent_type, [[key: "", value: ""]] ++ @rent_types,
      class: "form-control main-search__form-input main-search__form-input--select",
      value: @form_vals.rent_type %>
    <%= error_tag_live f, :rent_type, @changeset %>
  </div>

  <div class="form-group col-md-3 main-search__form-group">
    <%= label f, :rooms_number_min, gettext("Rooms") %>
    <%= select f, :rooms_number_min, 
      [
        [key: "1+", value: "1"],
        [key: "2+", value: "2"],
        [key: "3+", value: "3"],
        [key: "4+", value: "4"],
        [key: "5+", value: "5"]
      ], value: @form_vals.rooms_number_min,
      class: "form-control main-search__form-input main-search__form-input--select" %>
    <%= error_tag_live f, :rooms_number_min, @changeset %>
  </div>
</div>

@form_vals - это значения из предыдущего запроса, которые загружаются для формы, чтобы сохранить ее состояние. Я уверен, что они пройдены, но я не уверен, что они имеют хороший формат. Формат параметров, входящих в LiveView:

%{
  ... some other params ...
  "rent_max" => "",
  "rent_min" => "",
  "rent_type" => "2",
  "rooms_number_min" => "1",
  "square_area_max" => "",
  "square_area_min" => ""
  ... some other params ...
}

Формат параметров, оставляющих LiveView как form_vals:

%{
  ... some other params ...
  rent_max: "",
  rent_min: "",
  rent_type: "2",
  rooms_number_min: "1",
  square_area_max: "",
  square_area_min: ""
  ... some other params ...
}

При отправке события clear в LiveView я просто отвечаю чистыми значениями полей:

%{
  ... many other fields ...
  rent_type: "",
  rooms_number_min: "1",
  ... many other fields ...
}

Если у кого-то есть идея, почему мои селекторы исчезают, я был бы очень рад сообщить мне. Я действительно застрял и не знаю, что мне делать.

...