Eu tenho uma visão com alguns filtros expostos em um bloco; ele usa o AJAX e o recurso de envio automático para que a visualização seja recarregada assim que uma opção de filtro for alterada.
No pequeno atraso entre a seleção de uma opção e a visualização que está sendo recarregada, o familiar throbber AJAX azul é mostrado em algum lugar na parte inferior do formulário (acho que onde o botão de envio oculto está localizado).
Sei que posso personalizar esta imagem substituindo o CSS pelo elemento throbber, mas prefiro não usá-la.
O que eu prefiro fazer é desvanecer temporariamente o formulário de filtro exposto (e, idealmente, a exibição principal também), usando uma animação jQuery. Eles voltariam a aparecer quando a chamada AJAX estiver concluída.
Caso contrário, eu gostaria de usar o mesmo método que o módulo de interface do usuário do Views quando está atualizando, ou seja, colocando este ícone no meio da página:
Como isso já está incorporado, presumi que haveria uma configuração em algum lugar para alterar o estilo / local desse comportamento de carregamento; não tenho tanta sorte.
Como faço para implementar um desses métodos?
Estou usando o Drupal 7 com vistas 7.x-3.3.
fonte
Respostas:
Se você não se importa em usar um pequeno jquery, sempre pode fazer algo como:
fonte
ajaxSend
eajaxComplete
pode ser usado com condiçãoif (settings.url == '/views/ajax') {//... }
para mais controle.ajaxSuccess
só é acionado uma vez; acho que porque o evento não é automaticamente vinculado ao substituído<div>
), mas, além disso, isso é perfeito, sem mencionar a simplicidade da simplicidade. . Muito obrigadoPara completar, eis o código que acabei usando; esmaece o formulário de filtro exposto e a visualização quando o carregamento do AJAX começa e volta novamente quando termina:
fonte
Olá, eu criei um módulo muito simples que dose exatamente o que você quer fazer. O módulo possui uma página de configuração onde você pode controlar o estilo do throbber e até fazer upload de suas próprias imagens sem hackers.
Este é o link da sandbox: http://drupal.org/sandbox/ANDiTKO/1556808
Se você achar útil, reveiw aqui, para que possa ser aprovado como projeto oficial: http://drupal.org/node/1556114
fonte
Acabei de fazer uma pesquisa.
O
throbber
é codificado aqui no construtor deDrupal.views.ajaxView
.Uma instância de
Drupal.views.ajaxView
não está armazenadaDrupal.ajax
e existe@todo
.Isso significa que não podemos entrar no objeto e definir nossos próprios parâmetros.
Como o Views faz?
A resposta curta é CSS.
A página de administração do Views apenas oculta
throbber
e adiciona estilo ao pai.ajax-progress-throbber
.Posso fazer algo com o Drupal.ajax?
Sim, encontrei alguns métodos que você pode sobrescrever para elementos AJAX (botões, links, etc.). Eu mostrei um exemplo aqui: Como estender ou "prender" o Drupal Form AJAX? . Mas, neste caso, não será tão bom.
O elemento Progress está sendo exibido no
beforeSend
estágio, para que você possa fazer algo antes que isso aconteça.fonte
.throbber
e adicione alguns estilos a.ajax-progress-throbber
.ajax-progress-throbber
quando qualquer AJAX é invocado? Devo admitir que não notei isso acontecendo, mas vou verificar. E você acha que vou conseguir invocar a animação jQuery em umabeforeSend
função (com base na resposta à sua outra pergunta)? Obrigado, eu realmente não uso o Views e não me incomodo em cavar todo o caminho para descobrir todo o código para descobrir o que está acontecendo! Vou deixar você saber como eu vou continuar tentando.ajax-progress-throbber
classe aplicada a eles a qualquer momento, para que seu método não funcione. Obrigado por tentar