Actualmente estoy usando jQuery para cargar una vista, como esta:
$.ajax({
type: 'POST',
url: Drupal.settings.basePath + 'views/ajax',
dataType: 'json',
data: 'view_name=' + viewName + '&view_display_id=default&view_args=' + viewArgument, // Pass a key/value pair.
success: function(data) {
var viewHtml = data[1].data;
target.children().fadeOut(300, function() {
target.html(viewHtml);
var newHeightOfTarget = target.children().height();
target.children().hide();
target.animate({
height: newHeightOfTarget
}, 150);
target.children().delay(150).fadeIn(300);
Drupal.attachBehaviors(target);
});
},
error: function(data) {
target.html('An error occured!');
}
});
Mi problema es que, por ejemplo, si la vista usa el módulo 'Presentación de campo', los archivos js / css necesarios para que funcione correctamente no se cargan. ¿Cuál podría ser una buena solución (= gatitos ilesos) para esto?
7
views
ajax
javascript
Temaruk
fuente
fuente
Respuestas:
Hmm, siento que esta pregunta merece una recompensa mayor :-p pero no obstante aquí está mi intento de responder esto.
Drupal ya carga cualquier css / js adicional ahora, realmente no puedo encontrar mucha documentación y lamentablemente los archivos JS no se documentan fácilmente sin leer el código, pero está ahí.
Realmente debe intentar evitar hacer la solicitud $ .ajax usted mismo y, en su lugar, envolver todo con Drupal.ajax también si usa el Sistema Ajax, ni siquiera necesita escribir la solicitud ajax usted mismo.
Al implementar una solicitud ajax de Drupal adecuada utilizando comandos ajax, la mayor parte del manejo de css / js se realizará automáticamente.
Al mirar su código anterior, parece que está haciendo la misma solicitud que las vistas normalmente lo harían por su cuenta. Por lo tanto, probablemente debería permitir que las vistas manejen la solicitud de ajax y sobrescriban los comandos de ajax que se activarán como su comando. Puede hacer esto implementando un hook_ajax_comamnd_alter pero apesta con las vistas porque pierde toda la información contextual, por lo que recomendaría usar hook_views_ajax_data_alter en su lugar.
Sé que no hay mucho código en mi respuesta, pero es difícil responder con código, ya que el código actualmente no es correcto.
Para obtener más información, consulte Drupal.ajax en el archivo misc / ajax.js. Para ver un ejemplo de implementación de una solicitud ajax con Drupal.ajax, consulte el archivo ajax de vistas. Y si desea ver un ejemplo del comportamiento normal de vistas que se sobrescribe al cambiar los comandos ajax, vea el módulo views_load_more donde realizo este comportamiento.
Además, siéntase libre de comentar esta respuesta, si algo aquí no está claro.
Para obtener más información sobre Ajax Framework, consulte Ajax Framework, por ejemplo, consulte el módulo de ejemplo , aunque la mayor parte de lo que desea hacer no está cubierto en el módulo de ejemplos.
fuente