コンテンツへスキップ

d3-dispatch

ディスパッチは、名前付きコールバックを登録し、任意の引数でそれらを呼び出すことができる低レベルのインタラクションメカニズムです。 d3-dragなどの様々なD3インタラクションコンポーネントは、dispatchを使用してリスナーにイベントを送信します。これは、EventTargetに似ていますが、各リスナーには明確に定義された名前があるため、簡単に削除または置換できます。

例えば、startendイベント用のディスパッチを作成するには

js
const dispatch = d3.dispatch("start", "end");

dispatch.onを使用して、これらのイベントのコールバックを登録できます。

js
dispatch.on("start", callback1);
dispatch.on("start.foo", callback2);
dispatch.on("end", callback3);

dispatch.callまたはdispatch.applyを使用して、すべてのstartコールバックを呼び出すことができます。

js
dispatch.call("start");

function.callと同様に、thisコンテキストと任意の引数を指定することもできます。

js
dispatch.call("start", {about: "I am a context object"}, "I am an argument");

dispatch(...types)

ソースコード · 指定されたイベントtypesの新しいディスパッチを作成します。各typeは、"start""end"などの文字列です。

dispatch.on(typenames, callback)

ソースコード · 指定されたtypenamescallbackを追加、削除、または取得します。callback関数を指定すると、指定された(完全修飾された)typenamesに登録されます。指定されたtypenamesに既にコールバックが登録されている場合、新しいコールバックを追加する前に既存のコールバックが削除されます。

指定されたtypenamesは、startend.fooなどの文字列です。型には、オプションでピリオド(.)と名前を続けることができます。オプションの名前を使用すると、同じ型のイベント(start.foostart.barなど)に対して複数のコールバックを登録できます。複数のtypenamesを指定するには、typenamesをスペースで区切ります(例:start endstart.foo start.bar)。

特定の名前fooのすべてのコールバックを削除するには、dispatch.on(".foo", null)とします。

callbackを指定しない場合、指定されたtypenamesの現在のコールバック(存在する場合)を返します。複数のtypenamesが指定されている場合、最初に一致するコールバックが返されます。

dispatch.copy()

ソースコード · このディスパッチオブジェクトのコピーを返します。このディスパッチへの変更は、返されたコピーに影響を与えず、その逆も同様です。

dispatch.call(type, that, ...arguments)

ソースコード · function.callと同様に、指定されたtypeに対して登録されている各コールバックを呼び出し、thatthisコンテキストとして、指定された...argumentをコールバックに渡します。dispatch.applyを参照してください。

dispatch.apply(type, that, arguments)

ソースコード · function.applyと同様に、指定されたtypeに対して登録されている各コールバックを呼び出し、thatthisコンテキストとして、指定されたargumentsをコールバックに渡します。例えば、ネイティブのclickイベントを処理した後に、現在のthisコンテキストと引数を保持しながら、customコールバックをディスパッチしたい場合は、次のように記述できます。

js
selection.on("click", function() {
  dispatch.apply("custom", this, arguments);
});

コールバックに任意の引数を渡すことができます。最も一般的には、イベントを表すオブジェクトを作成するか、現在のデータム(d)とインデックス(i)を渡します。function.callfunction.applyを参照してください。