Callbacksオブジェクト生成時のオプション
Callbacksオブジェクトは生成時に下記のオプションを指定可能です。これらは複数組み合わせて使用することが可能です。
・once ・・・ 一度だけしかfireできない
・memory ・・・ あとから追加した関数に対しても、fireを実行する
・unique ・・・ 同じメソッドを複数回登録できないようにする
・stopOnFalse ・・・実行した関数の戻り値がfalseの場合、以降の処理を行わない
実際の動きをみてみましょう
onceオプション
function hello(){
console.log("Hello");
}
var callback=$.Callbacks("once");
callback.add(hello);
callback.fire();
callback.fire();
実行結果
Hello
onceオプションを指定しているので、fireメソッドを2回実行しても、1回しか実行されません。
memoryオプション
function hello(){
console.log("Hello");
}
function world(){
console.log("World");
}
var callback=$.Callbacks("memory");
callback.add(hello);
callback.fire();
callback.add(world);
実行結果
Hello
World
fire後にaddした関数も実行されました。
このように、memoryオプションを指定すると、あとから追加した関数に対しても、それ以前に実行したfireが適用されます。
これはonceを同時に指定した場合も同様の動きをします。(1回目のfireは後からaddした関数に対しても実行される)
uniqueオプション
function hello(){
console.log("Hello");
}
function world(){
console.log("World");
}
var callback=$.Callbacks("unique");
callback.add(hello);
callback.add(hello);
callback.add(world);
callback.fire();
実行結果
Hello
World
hello関数を2回登録しましたが、1回しか実行されませんでした。
uniqueオプションを指定すると、同じ関数オブジェクトを追加しても、重複して実行されることはありません。
stopOnFalseオプション
function hello(){
console.log("Hello");
return false;
}
function world(){
console.log("World");
}
var callback=$.Callbacks("stopOnFalse");
callback.add(hello);
callback.add(world);
callback.fire();
実行結果
Hello
最初に追加した関数しか実行されませんでした。
このように、@stopOnFalse`を指定した場合、追加した関数がfalse返すと後続の処理が行われません。
ちなみにnullやundefind , 0 , -1 等が返った場合は後続の処理が実行されます。
あくまでfalseが返った場合のみに有効になるオプションです。