Используйте Drupal7 AJAX программно - PullRequest
9 голосов
/ 28 октября 2010

X пост от http://drupal.org/node/953016

Система Drupal 7 AJAX великолепна, она очень плавно работает для форм и даже для ссылок.

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

Самый эффективный способ, который я нашел, чтобы сделать это такдалеко это:

  dummy_link = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>');
  $(vars_div).append(dummy_link);
  Drupal.attachBehaviors(vars_div);
  dummy_link.click();

Это эффективно, но огромный взлом.Я не нашел способа выполнить ajax-вызов и заставить это делать инфраструктуру Drupal ajax, а не стандартную инфраструктуру jquery.

Я бы подумал, что можно напрямую вызывать api drupal ajaxкто-нибудь знает как?

1 Ответ

7 голосов
/ 30 января 2011

Короткий короткий ответ: вы захотите получить что-то вроде:

$.ajax(ajax.options);

Что является частью jQuery, но с набором опций, которые помогут вам подключиться к Drupal Goodness с точки зренияобработки успеха, эффектов и т. д. Вот что эффективно происходит в вашем примере с «огромным хаком».

Для создания новой функции Drupal.ajax по-прежнему требуется синтетический элемент:

base = 'someid'
element = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>');
element_settings = {'url': uri, 'event': 'click'}
myAjax = new Drupal.ajax(base, element, element_settings)

Но вы можете, по крайней мере, запустить его, не имитируя щелчок в пользовательском интерфейсе:

myAjax.eventResponse(element, 'click')

Такое чувство, что должен быть лучший способ сделать это, но для этого требуется другой способ настройкиначальный прототип ajax, который не требует элемента DOM.Поскольку большая часть набора взаимодействий зависит от того, как перенести данные обратно в DOM, я не думаю, что этот вариант использования пока хорошо поддерживается.

Возможно также, что можно перейти прямо к jQueryс надлежащим набором опций и получим нужный эффект, но функции прототипа Drupal.ajax довольно часто ссылаются на себя, поэтому делать это без класса Drupal.ajax кажется рискованным.

...