Рейтинг:1

Как добавить уникальный идентификатор оболочки к элементу виджета?

флаг lb

Я сделал виджет, который «генерирует» поля на основе выбранного параметра поля выбора. Я сделал большую часть логики:

1- В этом поле выбирается вариант:

 $элемент['значение'] = [
  '#тип' => 'выбрать',
  '#options' => $this->getBreakpointsGroups(),
  '#default_value' => $значение,
  '#ajax' => [
    'callback' => [$this,'updateBreakpoint'], // не забывайте :: при вызове метода класса.
    'событие' => 'изменить',
    'wrapper' => $wrapper_id, // Этот элемент обновляется с помощью этого обратного вызова AJAX.
    'метод' => 'html',
  ]
];  

2-Затем выполняется функция updateBreakpoint, и она переходит к обновлению формы. Сначала я извлекаю значение оболочки на случай, если есть несколько форм виджета, чтобы он не предназначался для другого экземпляра той же формы.

    $state = $form_state->getTriggeringElement();
    $wrapper_id = $state['#ajax']['wrapper'];

3- После внесения некоторых изменений в форму я возвращаю изменения и использую команду AJAX.

    $ajax_response = новый AjaxResponse();
    $ajax_response->addCommand(new HtmlCommand("div#{$wrapper_id}", $form['image_fieldset']));
    вернуть $ajax_response;

Обертка определяется внутри функции formElement следующим образом:

    $wrapper_id = Html::getUniqueId('обертка');

Проблема в том, что никаких изменений не происходит. Когда я определяю $wrapper_id как строку без каких-либо уникальных функций идентификатора (например, «обертка»), вносятся изменения.Я в замешательстве, почему. Я убедился, что значение оболочки сохраняется во всей форме.

berliner avatar
флаг bd
Я думаю, было бы полезно увидеть ваш полный код для метода построителя формы и метода `updateBreakpoint`.
Рейтинг:0
флаг cn

Если у вас есть несколько оболочек на одной странице, вы не можете полагаться исключительно на Html::getUniqueId. Вам нужно добавить как можно больше предсказуемой информации.

Например, в элементе виджета с одним полем вы можете добавить имя поля, родителей поля и дельту поля:

$field_name = $this->fieldDefinition->getName();
$parents = $form['#parents'];
$prefix = implode('-', array_merge($parents, [$field_name, $delta]));

$wrapper_id = $префикс. '-моя-обертка';

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.