2010-10-28 16 views
9

X después de http://drupal.org/node/953016Uso Drupal7 AJAX bondad programación

El sistema AJAX Drupal 7 es grande, funciona muy bien para las formas e incluso para los enlaces.

Lo que no sé cómo hacerlo de una manera sensata es llamarlo desde javascript. Es posible que desee tener una página dinámica sin un formulario y, como parte de eso, hacer una llamada a Ajax de Drupal, específicamente para que los comandos ajax se ejecuten a la vuelta.

La manera más efectiva que he encontrado para hacer esto hasta ahora es:

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

que es eficaz, pero un gran truco. No he encontrado una manera de realizar una llamada ajax y hacer que lo haga el marco Ajax de Drupal, en lugar del marco de jquery estándar.

Hubiera pensado que era posible invocar directamente la API drupal ajax, ¿alguien sabe cómo?

Respuesta

7

La corta respuesta corta es que querrá conseguirse a algo como:

$.ajax(ajax.options); 

que es la parte de jQuery, pero con un conjunto de opciones que le ayudan a conectar a la bondad de Drupal en términos de manejo del éxito, efectos, etc. Esto es lo que realmente está ocurriendo para usted en su ejemplo de "gran hackeo".

Crear una nueva función Drupal.ajax programáticamente todavía requiere un elemento sintético:

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) 

Pero al menos puede gatillo sin simular un clic en la interfaz de usuario:

myAjax.eventResponse(element, 'click') 

Se siente como debería haber una mejor manera de hacerlo, pero requiere otra forma de configurar el prototipo inicial de Ajax que no requiere un elemento DOM. Debido a que gran parte del conjunto de interacción depende de cómo volver a transferir los datos al DOM, no creo que este caso de uso esté bien respaldado todavía.

También puede ser posible ir directamente a jQuery con un conjunto apropiado de opciones y obtener el efecto que desee, pero las funciones del prototipo Drupal.ajax se autorefieren bastante, por lo que hacerlo sin una clase Drupal.ajax parece arriesgado

+0

Tengo el mismo desafío básico en Druapl 6 con CTools, y tener un buen patrón para ambos sería genial. –

+0

Gracias Josh, miré hacerlo sin la clase drupal.ajax, pero llegué a la misma conclusión que tú. Estoy contento con su respuesta, me preocupaba que me estaba perdiendo algo obvio, pero no creo que lo fuera ahora. –

+0

Aunque lo mantendré en mi radar. Creo que puede surgir una mejor técnica y podemos tener una "mejor práctica" general para los demás. :) –

Cuestiones relacionadas