Spec-Zone.ru › D3.js 4

d3-dispatch

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

Например, чтобы создать диспечер для событий 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 4.0. Поддерживаются среды 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–2017 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-dispatch

Spec-Zone.ru

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