MooToolsにはChainというクラスがある。
これは関数の実行を数珠繋ぎに出来る便利なヤツです。
公式にあるChainのデモはFxのstartメソッドにchainメソッドをくっつけているものなのだけど、
ドキュメントの一番上に載っている、クラスにChainをImplemantするサンプルコードを実行してみると動かなかったりする。
var Todo = new Class({
Implements: Chain,
initialize: function(){
this.chain.apply(this, arguments);
}
});
var myTodoList = new Todo(
function(){ alert('get groceries'); },
function(){ alert('go workout'); },
function(){ alert('code mootools documentation until eyes close involuntarily'); },
function(){ alert('sleep'); }
);
jsFiddleに移したサンプルがこちら
Runボタン(右側の矢印)を押しても何も起きない。
そこでcallChainを各関数に入れる。
分かりやすくPタグを作成してメッセージが出るようにしてみた。
すると関数が全部実行されるようになります。
実行のタイミングをずらしたい場合にはcallChainにdelayを使う。
この場合、delayの2番目の引数でthisを指定しないとエラーになる。
さらに何かエフェクトをつけたいとする。callChainはstartにくっつけて使ったりは出来ないのでthis.callChainのままなんだけど、
エフェクトのdurationとdelayを同じにしないとアニメーションの途中で次のchainが実行される。
※Fxエフェクトはデフォルトがduration:500になっている。
Requestとかで確実に完了後に実行したいなんてときはonCompleteメソッドにthis.callChainを入れると良い。
結論:ちょっとクセがあるけどChainは便利。