drupal 8 Вызов функции JavaScript после события #AJAX - PullRequest
0 голосов
/ 08 июня 2018

Я хочу, чтобы js-скрипт запускался после выполнения действия ajax.

Например, его работа для Drupal 7:

  Drupal.behaviors.events = {
  attach: function(context, settings) {
    $('#example').bind('ajaxSuccess', function(data, status, xhr) {
      >>code here<<
    });
  }
};

как написать успешный скрипт для Drupal 8?

1 Ответ

0 голосов
/ 08 июня 2018

Используя объект \Drupal\Core\Ajax\InvokeCommand в \Drupal\Core\Ajax\AjaxResponse::addCommand().

Ajax можно использовать с формами для предоставления различных вещей.Типичные шаги:

  • Создание формы.
  • В ::buildForm() используйте элемент визуализации #ajax.
  • Создание обратного вызова.

Есть два способа ответить на запрос ajax.Вы можете либо ответить с помощью объекта AjaxResponse или HTML, чтобы заменить элемент, которым может быть либо необработанный HTML, либо массив рендеринга.

Чтобы вызвать свою собственную функцию Javascript - по вашему желанию - выдолжен ответить AjaxResponse объектом.

Вот полная документация Ajax на Drupal 8 .


Вот пример:

Частично ::buildForm() с реализацией элемента рендеринга Ajax:

$form['submit'] = [
  '#type'        => 'submit',
  '#value'       => $this->t('Send'),
  '#ajax'        => [
    'callback' => [$this, 'respondToAjax'],
  ]
];

Вот метод обратного вызова Ajax, в той же форме:

/**
 * @param array $form
 *   Form API array structure.
 * @param array $form_state
 *   Form state information.
 *
 * @return \Drupal\Core\Ajax\AjaxResponse
 *   Response object.
 */
public function respondToAjax(array &$form, FormStateInterface $form_state) {
  $response = new AjaxResponse();
  $response->addCommand(new InvokeCommand('#example', 'ajaxSuccess'));
  return $response;
}

Вы можете найти здесь список всех команд, которые вы можете передать в ответе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...