9

http://drupal.org/node/953016からの X 投稿

Drupal 7 の AJAX システムは素晴らしく、フォームやリンクに対しても非常にスムーズに動作します。

まともな方法でうまくいかないのは、javascriptから呼び出すことです。フォームのない動的ページを作成し、その一環として Drupal ajax 呼び出しを行いたい場合があります。具体的には、戻り時に ajax コマンドが実行されるようにするためです。

これまでにこれを行うために私が見つけた最も効果的な方法は次のとおりです。

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

これは効果的ですが、巨大なハックです。標準のjqueryフレームワークではなく、Ajax呼び出しを実行し、Drupal ajaxフレームワークで実行する方法が見つかりませんでした。

drupal ajax api を直接呼び出すことは可能だと思っていたのですが、方法を知っている人はいますか?

4

1 に答える 1

7

短い短い答えは、次のようなものになりたいということです。

$.ajax(ajax.options);

これは jQuery の部分ですが、成功の処理、効果などの点で Drupal の良さを理解するのに役立つ一連のオプションがあります。これが、「巨大なハック」の例で実際に起こっていることです。

新しい 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)

ただし、少なくとも UI でクリックをシミュレートせずにトリガーできます。

myAjax.eventResponse(element, 'click')

これを行うにはもっと良い方法があるはずですが、DOM 要素を必要としない最初の ajax プロトタイプをセットアップする別の方法が必要です。インタラクション セットの多くは、データを DOM に戻す方法に依存しているため、このユースケースはまだ十分にサポートされていないと思います。

適切なオプション セットを使用して jQuery に直接アクセスし、必要な効果を得ることができる場合もありますが、Drupal.ajax プロトタイプ関数はかなり自己参照するため、Drupal.ajax クラスなしで行うのは危険に思えます。

于 2011-01-29T23:09:11.833 に答える