Повторная загрузка формы Drupal 8 ajax приводит к нескольким пульсаторам - PullRequest
0 голосов
/ 01 октября 2018

Я создал форму с вводом текста и набором радиокнопок, а также кнопкой отправки ajax.Когда пользователь вводит текст и затем щелкает ajax-submit, форма перезагружается, фильтруя радиоэлементы по текстовому вводу.

Все это прекрасно работает, но есть любопытное поведение - после каждого последовательного ajax-click-submit, добавляется дополнительный элемент ajax throbber (см. изображения).

Ожидаемое поведение будет состоять в том, что, несмотря на последовательные ajax-click-submit, отображается только один throbber.

Другойнеобычное поведение заключается в том, что при включении $form_state->rebuild() в функцию submit обратный вызов ajax вызывается только при первом нажатии.В похожей форме, которую я построил недавно, это был не тот случай.В противном случае обратный вызов формы и ajax с фильтрацией работает, как и ожидалось.

несколько экземпляров в разметке

см. Несколько пульсаторов в действии

$form['container']['search_submit'] = [
  '#type' => 'submit',
  '#value' => 'Filter',
  '#submit' => ['::filterOptionsSubmitCallback'],
  '#ajax' => [
    'event' => 'click',
    'callback' => [$this, 'filterOptionsAjaxCallback'],
    'wrapper' => $this->formSelector,
    'url' => Url::fromRoute($this->formRoute),
  ],
];

  public function filterOptionsSubmitCallback(array &$form, FormStateInterface $form_state)
  {
    $search = $form_state->getValue('search');
    $filter = $form_state->getValue('filter');
    $this->store->set('searchString', $search);
    $this->store->set('exerciseFilter', $filter);
    // $form_state->setRebuild();
  }

  public function filterOptionsAjaxCallback(array &$form, FormStateInterface $form_state)
  {
    return $form['container'];
  }
...