Melhor compreensão dos comportamentos Drupal

51

Eu li sobre os comportamentos do Drupal hoje e tentei escrever o seguinte código.

(function ($) {

  Drupal.behaviors.mymodule = {
    attach: function (context, settings) {
      $('#mymodule_id', context).change(function () {
        alert('Handler for .change() called.');
      });
    }
  };

}(jQuery));
  • É Drupal.behaviors.mymoduleo espaço para nome?
  • Quais são os parâmetros de contexto e configurações passados ​​para o comportamento do Drupal?
  • Isso é equivalente a document.ready()?
  • Posso anexar qualquer número de funções?
  • Posso definir funções JavaScript que serão chamadas em algum lugar?
Hacker
fonte
Este post de Lullabot faz um ótimo trabalho de explicar os conceitos em torno de comportamentos JS: lullabot.com/articles/...
Steve Persch

Respostas:

56

Em resumo, a vantagem do Behaviors document.ready()é que eles são automaticamente reaplicados a qualquer conteúdo carregado pelo AJAX. mymoduleé o seu espaço para nome, que precisa ser exclusivo. contexté a parte da página à qual isso se aplica, por exemplo, parte de um formulário que foi atualizado com o AJAX. Você pode anexar vários comportamentos, mas acho que você precisa usar um nome exclusivo (mymodule) para cada um deles.

Consulte os seguintes recursos para obter mais informações:

Berdir
fonte
2

Em palavras fáceis, Drupal.behaviorsé a melhor maneira de implementarjQuery.ready

Diferente do jQuery.readyque é executado apenas uma vez quando o DOM está pronto, Drupal.behaviorspode ser executado várias vezes durante a execução da página.

Por exemplo, nas visualizações rolagem infinita, mais elementos serão carregados quando o usuário clicar no botão carregar mais; portanto, o DOM será alterado após o carregamento inicial.

E se quisermos adicionar classes aos novos elementos adicionados? Aqui os comportamentos Drupal são úteis.

Os comportamentos serão executados em todas as solicitações, incluindo solicitações AJAX.

Drupal chamará comportamentos anexados quando o DOM for carregado e também quando for alterado pelo Ajax, transmitindo dois argumentos

contexto e configurações

Na primeira vez em que Drupal.attachBehaviors () é chamado, a variável de contexto contém o objeto de documento que representa o DOM, mas, pelo restante das chamadas, o contexto retém a parte afetada do HTML.

configurações contém informações repassadas ao JavaScript via PHP, é semelhante ao acesso a Drupal.settings.

Além disso, os módulos também podem chamar Drupal.attachBehaviors ().

vivek agarwal
fonte