2010-10-28 2 views
9

post de X http://drupal.org/node/953016Utilisez drupal7 bonté AJAX programme

Le système AJAX Drupal 7 est grande, cela fonctionne très bien pour les formes et même pour les liens.

Ce que je n'arrive pas à faire d'une manière sensée, c'est de l'appeler depuis javascript. Je peux vouloir avoir une page dynamique sans formulaire et faire partie d'un appel Drupal ajax, spécifiquement pour que les commandes ajax soient exécutées sur retour.

La façon la plus efficace que j'ai trouvé de le faire jusqu'à présent est:

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

Ce qui est efficace, mais un énorme hack. Je n'ai pas trouvé un moyen d'effectuer un appel ajax et j'ai le framework Drupal ajax le faire, plutôt que le framework jquery standard.

J'aurais pensé qu'il était possible d'invoquer le drupal ajax api directement, est-ce que quelqu'un sait comment?

Répondre

7

La réponse courte est courte, vous aurez envie de vous rendre à quelque chose comme:

$.ajax(ajax.options); 

Quelle est la partie jQuery, mais avec un ensemble d'options qui vous aident crochet dans la Bonté Drupal en termes de la gestion du succès, les effets, etc. C'est ce qui est effectivement ce qui se passe pour vous dans votre exemple "énorme hack".

Création d'une nouvelle fonction nécessite encore Drupal.ajax programatically un élément synthétique:

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) 

Mais vous pouvez au moins déclencher sans simuler un clic dans l'interface utilisateur:

myAjax.eventResponse(element, 'click') 

Il se sent comme Il devrait y avoir une meilleure façon de le faire, mais cela nécessite une autre façon de configurer le prototype ajax initial qui ne nécessite pas d'élément DOM. Étant donné qu'une grande partie de l'ensemble d'interactions repose sur la façon de ramener les données dans le DOM, je ne pense pas que ce cas d'utilisation soit encore bien pris en charge.

Il peut également être possible d'aller directement à jQuery avec un ensemble d'options approprié et obtenir l'effet que vous voulez, mais les fonctions du proto de Drupal.ajax se réfèrent beaucoup, donc le faire sans une classe Drupal.ajax risqué.

+0

J'ai le même défi de base dans DruApl 6 avec CTools, et avoir un bon motif pour les deux serait génial. –

+0

Merci Josh, j'ai regardé le faire sans la classe drupal.ajax, mais je suis arrivé à la même conclusion que toi. Je suis content de votre réponse, j'étais inquiet de manquer quelque chose d'évident mais je ne pense pas que j'étais maintenant. –

+0

Je vais garder cela sur mon radar cependant. Je pense qu'une meilleure technique peut émerger et nous pouvons avoir une «meilleure pratique» générale pour les autres. :) –

Questions connexes