Spec-Zone.ru › D3.js 6

d3-dispatch

Диспатчинг — удобный механизм для разделения задач с слабосвязанным кодом: регистрация именованных обратных вызовов и их вызов с произвольными аргументами. Различные компоненты D3, такие как d3-request, используют этот механизм для отправки событий слушателям. Подумайте об этом как о Node’s EventEmitter, за исключением того, что каждый слушатель имеет чётко определённое имя, что упрощает их удаление или замену.

Например, чтобы создать диспатчер для событий start и end:

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

Затем вы можете зарегистрировать обратные вызовы для этих событий, используя dispatch.on:

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

Затем вы можете вызвать все обратные вызовы start, используя dispatch.call или dispatch.apply:

dispatch.call("start");

Как и function.call, вы также можете указать this контекст и любые аргументы:

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

Хотите более подробный пример? Посмотрите, как использовать d3-dispatch для скоординированных представлений.

Установка

Если вы используете NPM, npm install d3-dispatch. В противном случае загрузите последнюю версию. Вы также можете загрузить напрямую с d3js.org, как отдельную библиотеку или как часть D3. Поддерживаются среды AMD, CommonJS и vanilla. В vanilla среде экспортируется d3 глобальная переменная:

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

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

</script>

Попробуйте d3-dispatch в вашем браузере.

Справочник по API

d3.dispatch(types…) · Исходный код

Создаёт новый диспатчер для указанных типов событий types. Каждый type — это строка, например, "start" или "end".

dispatch.on(typenames[, callback]) · Исходный код

Добавляет, удаляет или получает callback для указанных typenames. Если функция callback указана, она регистрируется для указанных (полностью квалифицированных) typenames. Если для заданных typenames уже был зарегистрирован обратный вызов, существующий обратный вызов удаляется перед добавлением нового.

Указанные typenames — это строка, например, start или end.foo. Тип может быть необязательно после точки (.) и имени; необязательное имя позволяет регистрировать несколько обратных вызовов для получения событий одного типа, таких как start.foo и start.bar. Чтобы указать несколько имён типов, разделяйте их пробелами, например start end или start.foo start.bar.

Чтобы удалить все обратные вызовы для данного имени foo, например dispatch.on(".foo", null).

Если callback не указан, возвращает текущий обратный вызов для указанных typenames, если он есть. Если указано несколько имён типов, возвращается первый совпадающий обратный вызов.

dispatch.copy() · Исходный код

Возвращает копию этого объекта диспатчера. Изменения в этом диспатчере не влияют на возвращённую копию и наоборот.

dispatch.call(type[, that[, arguments…]]) · Исходный код

Как и function.call, вызывает каждый зарегистрированный обратный вызов для указанного type, передавая обратным вызовам указанные arguments, с that в качестве this контекста. См. dispatch.apply для получения дополнительной информации.

dispatch.apply(type[, that[, arguments]]) · Исходный код

Как и function.apply, вызывает каждый зарегистрированный обратный вызов для указанного type, передавая обратным вызовам указанные arguments, с that в качестве this контекста. Например, если вы хотите отправить свои обратные вызовы custom после обработки события click, сохранив текущий this контекст и аргументы, вы можете сказать:

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

Вы можете передавать любые аргументы обратным вызовам; чаще всего вы можете создать объект, который представляет событие, или передать текущий элемент данных (d) и индекс (i). См. function.call и function.apply для получения дополнительной информации.

© 2010–2020 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-dispatch

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API