npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

d3-dispatch

v3.0.1

Published

Register named callbacks and call them with arguments.

Downloads

16,777,022

Readme

d3-dispatch

Dispatching is a convenient mechanism for separating concerns with loosely-coupled code: register named callbacks and then call them with arbitrary arguments. A variety of D3 components, such as d3-drag, use this mechanism to emit events to listeners. Think of this like Node’s EventEmitter, except every listener has a well-defined name so it’s easy to remove or replace them.

For example, to create a dispatch for start and end events:

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

You can then register callbacks for these events using dispatch.on:

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

Then, you can invoke all the start callbacks using dispatch.call or dispatch.apply:

dispatch.call("start");

Like function.call, you may also specify the this context and any arguments:

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

Want a more involved example? See how to use d3-dispatch for coordinated views.

Installing

If you use npm, npm install d3-dispatch. You can also download the latest release on GitHub. For vanilla HTML in modern browsers, import d3-dispatch from Skypack:

<script type="module">

import {dispatch} from "https://cdn.skypack.dev/d3-dispatch@3";

const d = dispatch("start", "end");

</script>

For legacy environments, you can load d3-dispatch’s UMD bundle from an npm-based CDN such as jsDelivr; a d3 global is exported:

<script src="https://cdn.jsdelivr.net/npm/d3-dispatch@3"></script>
<script>

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

</script>

Try d3-dispatch in your browser.

API Reference

# d3.dispatch(types…) · Source

Creates a new dispatch for the specified event types. Each type is a string, such as "start" or "end".

# dispatch.on(typenames[, callback]) · Source

Adds, removes or gets the callback for the specified typenames. If a callback function is specified, it is registered for the specified (fully-qualified) typenames. If a callback was already registered for the given typenames, the existing callback is removed before the new callback is added.

The specified typenames is a string, such as start or end.foo. The type may be optionally followed by a period (.) and a name; the optional name allows multiple callbacks to be registered to receive events of the same type, such as start.foo and start.bar. To specify multiple typenames, separate typenames with spaces, such as start end or start.foo start.bar.

To remove all callbacks for a given name foo, say dispatch.on(".foo", null).

If callback is not specified, returns the current callback for the specified typenames, if any. If multiple typenames are specified, the first matching callback is returned.

# dispatch.copy() · Source

Returns a copy of this dispatch object. Changes to this dispatch do not affect the returned copy and vice versa.

# dispatch.call(type[, that[, arguments…]]) · Source

Like function.call, invokes each registered callback for the specified type, passing the callback the specified arguments, with that as the this context. See dispatch.apply for more information.

# dispatch.apply(type[, that[, arguments]]) · Source

Like function.apply, invokes each registered callback for the specified type, passing the callback the specified arguments, with that as the this context. For example, if you wanted to dispatch your custom callbacks after handling a native click event, while preserving the current this context and arguments, you could say:

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

You can pass whatever arguments you want to callbacks; most commonly, you might create an object that represents an event, or pass the current datum (d) and index (i). See function.call and function.apply for further information.