Atualmente, estou usando o jQuery para carregar uma visualização, assim:
$.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!');
}
});
Meu problema é que, por exemplo, se a exibição usa o módulo 'Apresentação de slides do campo', os arquivos js / css necessários para que ele funcione corretamente não são carregados. O que poderia ser uma boa solução (= gatinhos ilesos) para isso?
7
views
ajax
javascript
Temaruk
fonte
fonte
Respostas:
Hmm, acho que essa pergunta merece uma recompensa maior :-p, mas não obstante, aqui está minha tentativa de responder a isso.
O Drupal já carrega qualquer css / js extra agora, não consigo encontrar muita documentação e, infelizmente, os arquivos JS não são facilmente documentados sem realmente ler o código, mas já existe.
Você realmente deve tentar evitar fazer a solicitação $ .ajax e, em vez disso, agrupar tudo com o Drupal.ajax também, se você usar o sistema Ajax, nem precisará escrever a solicitação ajax.
Ao implementar uma solicitação Drupal ajax adequada, usando comandos ajax, a maior parte da manipulação do css / js será feita automaticamente.
Observando o código acima, parece que você está fazendo as mesmas visualizações de solicitação que normalmente faria isso sozinho. Portanto, você provavelmente deve permitir que as visualizações tratem a solicitação ajax e sobrescreva os comandos ajax que serão acionados para serem seu comando. Você pode fazer isso implementando um hook_ajax_comamnd_alter, mas é meio ruim com visualizações porque você perde todas as informações contextuais, então eu recomendaria o uso de hook_views_ajax_data_alter.
Eu sei que não há muito código na minha resposta, mas é difícil responder com código, sendo que o código atualmente não está correto.
Para obter mais informações, consulte Drupal.ajax no arquivo misc / ajax.js. Para um exemplo de implementação de uma solicitação ajax com Drupal.ajax, consulte o arquivo ajax das exibições. E se você quiser ver e exemplo de exibições o comportamento normal sendo substituído, alterando os comandos ajax, consulte o módulo views_load_more no qual eu faço esse comportamento.
Também sinta-se à vontade para comentar esta resposta, se algo aqui não estiver claro.
Sobre e para obter mais informações sobre o Ajax Framework, consulte Ajax Framework, por exemplo, veja o módulo de exemplo , mesmo que a maioria do que você queira fazer não seja abordada no módulo de exemplos.
fonte