как получить доступ к состояниям формы внутри функции обратного вызова ajax - PullRequest
0 голосов
/ 28 марта 2012

Я работаю над блочным модулем и хотел бы выполнять операции ajax с его формами конфигурации, когда файл загружается через поле managed_file.

Таким образом, при изменении скрытого поля управляемого_файла (после успешной загрузки файла) происходит обратный вызов ajax. Аякс называется так:

function updateVideo($action){
(function ($) {
    $.ajax({
        url: '/block_video/update_video', // drupal menu path
        dataType: 'json',
        type: 'POST',
        data: { 'action' : $action },
        success: function(data){
            // @ TODO
        }
    });
})(jQuery);
}

Зарегистрированный выше путь drupal (/ block_video / update_video) вызывает функцию, в которой я хотел бы получить переменную $ form_state конфигурации блока с ее текущим состоянием (не начальным). Можно ли увидеть текущие состояния формы конфигурации блока без непосредственного использования javascript и без вызова обновления страницы?

Для меня было бы намного проще использовать свойство '#ajax' в управляемом файле, но у него его нет. Поэтому я добавил обратный вызов ajax выше, ожидая изменения значения в скрытом элементе managed_file, и эта часть работает (используя метод, описанный здесь http://forum.jquery.com/topic/adding-a-change-event-on-a-hidden-field).

Я должен быть в состоянии получить значение $ form_state в моем пользовательском обратном вызове ajax. Я хотел бы сделать это так, как это делается с помощью FAPI [#ajax] [callback] (оба параметра $ form и $ form_state передаются в параметры обратного вызова - мне нужно только передать текущее значение $ form_state в мой обратный вызов или получить к нему доступ) Я не могу понять, как это делает Drupal.

Может быть, кто-то может помочь мне случайно ...

Спасибо.

1 Ответ

0 голосов
/ 06 апреля 2012

Хорошо, я исправил это вскоре после того, как спросил, поэтому вот ответ: Я не нашел никакого решения для извлечения form_states вне обратного вызова #ajax, поэтому при изменении состояния скрытого поля я получаю текущее состояние формы непосредственно из чистой jjuery-функции ajax.

Не по теме, но отчасти связано: я управлял другими form_states внутри обычного обратного вызова FAPI #ajax php, мне нужно было вызывать некоторые пользовательские js сразу после этого, поэтому с помощью метода ниже вы можете вызвать второй обратный вызов ajax или просто функцию. Это сделано так:

  // Code inside the FAPI #ajax callback :
  // Trigger the function $.fn.ajaxTrigger defined in my js file.
  $commands[] = ajax_command_invoke(NULL, 'ajaxTrigger');
  return array(
    '#type' => 'ajax',
    '#commands' => $commands,
  );

С помощью этой команды вы можете вызвать любую функцию javascript из обратного вызова Drupal 7 #ajax.

...