2010-10-28 9 views
9

X post dal http://drupal.org/node/953016Usa Drupal7 AJAX bontà di programmazione

Il Drupal 7 sistema di AJAX è grande, funziona molto bene per le forme e anche per i collegamenti.

Quello che non riesco a capire come fare in modo sano è chiamarlo da javascript. Potrei voler avere una pagina dinamica senza un modulo e come parte di essa fare una chiamata ajax Drupal, in particolare in modo che i comandi ajax vengano eseguiti al loro ritorno.

Il modo più efficace che ho trovato per fare questo finora è:

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

che è efficace ma un enorme hack. Non ho trovato un modo per eseguire una chiamata Ajax e avere il framework Drupal ajax farlo, piuttosto che il framework jquery standard.

Avrei pensato che fosse possibile invocare direttamente la drupal ajax api, qualcuno sa come?

risposta

7

La risposta breve è breve si vorrà ottenere voi stessi a qualcosa di simile:

$.ajax(ajax.options); 

che è la parte jQuery, ma con una serie di opzioni che consentono di collegare in Bontà Drupal in termini di gestione del successo, effetti, ecc. Questo è effettivamente ciò che è successo per te nel tuo esempio di "enorme hack".

Creazione di una nuova funzione Drupal.ajax programatically richiede ancora un elemento sintetico:

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) 

Ma si può almeno grilletto senza simulare un clic nell'interfaccia utente:

myAjax.eventResponse(element, 'click') 

ci si sente come dovrebbe esserci un modo migliore per farlo, ma richiede un altro modo per impostare il prototipo ajax iniziale che non richiede un elemento DOM. Poiché gran parte dell'interazione-set dipende da come spostare i dati nel DOM, non credo che questo caso d'uso sia ancora ben supportato.

Potrebbe anche essere possibile accedere direttamente a jQuery con un set di opzioni appropriato e ottenere l'effetto desiderato, ma il protoipo Drupal.ajax funziona in modo autonomo molto così facendo senza una classe Drupal.ajax sembra rischiosa.

+0

Ho la stessa sfida di base in Druapl 6 con CTools, e avere un buon modello per entrambi sarebbe fantastico. –

+0

Grazie Josh, ho guardato a farlo senza la classe drupal.ajax, ma sono giunto alla stessa conclusione che hai fatto. Sono contento della tua risposta, ero preoccupato di non essermi sentito qualcosa di ovvio ma non credo di esserlo ora. –

+0

Lo terrò comunque sul mio radar. Penso che una tecnica migliore possa emergere e possiamo avere una "best practice" generale per gli altri. :) –

Problemi correlati