GithubHelp home page GithubHelp logo

gerhobbelt / d3-dispatch Goto Github PK

View Code? Open in Web Editor NEW

This project forked from d3/d3-dispatch

0.0 3.0 0.0 104 KB

Register named callbacks and call them with arguments.

License: BSD 3-Clause "New" or "Revised" License

JavaScript 100.00%

d3-dispatch's Introduction

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-request, 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:

var 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. Otherwise, download the latest release. You can also load directly from d3js.org, either as a standalone library or as part of D3 4.0. AMD, CommonJS, and vanilla environments are supported. In vanilla, a d3 global is exported:

<script src="https://d3js.org/d3-dispatch.v1.min.js"></script>
<script>

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

</script>

Try d3-dispatch in your browser.

API Reference

# d3.dispatch(types…)

Creates a new dispatch for the specified event types. Each type is a string, such as "start" or "end"; for each type, a method is exposed on the returned dispatch for invoking the callbacks of that type.

# dispatch.on(typenames[, callback])

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()

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…]])

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]])

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.

d3-dispatch's People

Contributors

mbostock avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.