Mootools – Chain

Executar funções em determinada ordem, como filas de requisições, através de uma classe. Resumindo, é isso o que faz a classe Chain, da Mootools, e nesse post veremos como funciona e também como implementar essa funcionalidade em suas próprias classes.
Seqüenciando Funções
Para criar uma seqüência de funções, basta instanciar a classe Chain. Após isso, já podemos adicionar funções à seqüência para podermos chamá-la quando necessário.
Adicionamos funções à uma seqüência através do método Chain.chain, passando como parâmetro a função a ser adicionada à seqüência.
var myChain = new Chain();
myChain.chain(function() {
alert("Primeira Função");
});
myChain.chain(function() {
alert("Segunda Função");
});
O método Chain.callChain é quem chama a próxima função da seqüência. Quando o método é executado, a função é executada e então removida da seqüência.
myChain.callChain(); // "Primeira Função"
myChain.callChain(); // "Segunda Função"
Caso necessário, podemos limpar todas as funções de nossa seqüência através do método Chain.clearChain.
Implementando em Classes
Obviamente, Chain é muito mais útil quando usado dentro de uma função. Classes não deixam de ser uma função, e possuem muito mais poder. É nelas onde a utilização de Chain acontece na própria Mootools.
Após a implementação de Chain em alguma classe, podemos utilizar seus métodos.
var myClass = new Class({
"initialize": function() {},
"execute": function() {
this.callChain();
if(this.chains.length > 0) this.execute();
}
});
myClass.implement(new Chain);
var myChain = new myClass();
myChain.chain(function() {
alert("Primeira Função");
});
myChain.chain(function() {
alert("Segunda Função");
});
myChain.execute();
Como no exemplo acima, também podemos utilizar a variável Chain.chains, que é o array que contém todas as funções na seqüência. Não é necessário se preocupar muito com ele, já que a classe faz todo o necessário. O utilizei acima somente para não criar um loop infinito.
Essa classe também já é implementada na utilização de efeitos, para encadear vários efeitos subseqüentes. Também muito útil para se criar uma fila de requisições Ajax, ou algo do gênero. Vou ficando por aqui, até!







Muito bom Júlio, já tenho onde consultar pela Mootools!
Fala Julio, eles tiraram o chain antigo?
… ).chain(func …
falows
@Igor: na verdade o Chain continua. O que mudou é a maneira como ele é implementado (até tenho que atualizar o post). Agora, na criação da classe, implementamos assim: new Class( { Implements: Chain } )