$.Callbacks

コールバック関数を複数格納し、管理するためのリストを返します。

$.Callbacks( flags ) 1.7追加

コールバック関数を複数格納し、管理するためのリストを返します。

引数説明
flags スペース区切りでコールバック処理の制御を指定します。

下記のメソッドを使用して、コールバック関数の管理します。

  • callbacks.add()
  • callbacks.remove()
  • callbacks.fire()
  • callbacks.disable()

例を挙げて基本的な使い方を説明します。下記のようにfn1とfn2関数が定義されていたとします。

function fn1( value ){
    console.log( value );
}

function fn2( value ){
    fn1("fn2 says:" + value);
    return false;
}

これらの関数を$.Callbacksリストに.add()で追加し、.fire()でリストに格納した関数を順に実行させます。

var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "foo!" ); // (出力結果) foo!

callbacks.add( fn2 );
callbacks.fire( "bar!" ); // (出力結果) bar!, fn2 says: bar!

.remove()は追加した関数を削除します。

var callbacks = $.Callbacks();
callbacks.add( fn1 );
callbacks.fire( "foo!" ); // (出力結果) foo!

callbacks.add( fn2 );
callbacks.fire( "bar!" ); // (出力結果) bar!, fn2 says: bar!

callbacks.remove(fn2);
callbacks.fire( "foobar" );

// f2は削除されたため、foobarの出力はfn1によるものだけになります

引数のflagsについて

引数のフラグは$.Callbacks('unique stopOnFlase')のように、空白区切りで複数の組み合わせを指定する事が出来ます。

once
コールバックリストが実行されるのは一度きりになります。
memory
fire後にadd指定された関数があったとしても、次のfireで前回指定した引数を元に処理が行われます。
unique
addで重複して同じ関数を指定しても無視されます。
stopOnFalse
指定したコールバック関数の戻り値がfalseの場合、その関数は実行されません。

$.Callbacks( 'once' )

var callbacks = $.Callbacks( "once" );
callbacks.add( fn1 );
callbacks.fire( "foo" );
callbacks.add( fn2 );
callbacks.fire( "bar" );
callbacks.remove( fn2 );
callbacks.fire( "foobar" );

/*
(出力結果)
foo
*/

$.Callbacks( 'memory' )

var callbacks = $.Callbacks( "memory" );
callbacks.add( fn1 );
callbacks.fire( "foo" );
callbacks.add( fn2 );
callbacks.fire( "bar" );
callbacks.remove( fn2 );
callbacks.fire( "foobar" );

/*
(出力結果)
foo
fn2 says:foo
bar
fn2 says:bar
foobar
*/

$.Callbacks( 'unique' )

var callbacks = $.Callbacks( "unique" );
callbacks.add( fn1 );
callbacks.fire( "foo" );
callbacks.add( fn1 ); // repeat addition
callbacks.add( fn2 );
callbacks.fire( "bar" );
callbacks.remove( fn2 );
callbacks.fire( "foobar" );

/*
(出力結果)
foo
bar
fn2 says:bar
foobar
*/

$.Callbacks( 'stopOnFalse' )

function fn1( value ){
    console.log( value );
    return false;
}

function fn2( value ){
    fn1("fn2 says:" + value);
    return false;
}

var callbacks = $.Callbacks( "stopOnFalse");
callbacks.add( fn1 );
callbacks.fire( "foo" );
callbacks.add( fn2 );
callbacks.fire( "bar" );
callbacks.remove( fn2 );
callbacks.fire( "foobar" );

/*
(出力結果)
foo
bar
foobar
*/

$.Callbacks( 'unique memory' )

function fn1( value ){
    console.log( value );
    return false;
}

function fn2( value ){
    fn1("fn2 says:" + value);
    return false;
}

var callbacks = $.Callbacks( "unique memory" );
callbacks.add( fn1 );
callbacks.fire( "foo" );
callbacks.add( fn1 ); // repeat addition
callbacks.add( fn2 );
callbacks.fire( "bar" );
callbacks.add( fn2 );
callbacks.fire( "baz" );
callbacks.remove( fn2 );
callbacks.fire( "foobar" );

/*
(出力結果)
foo
fn2 says:foo
bar
fn2 says:bar
baz
fn2 says:baz
foobar
*/

 Back to top

© 2010 - 2017 STUDIO KINGDOM