Внутренности
Справочник API ▸ Ядро ▸ Внутренности
Различные утилиты для реализации повторно используемых компонентов.
Функции
d3.functor(значение)
Если указанное значение является функцией, возвращает указанное значение. В противном случае возвращает функцию, которая возвращает указанное значение. Этот метод используется во внутренних целях как быстрый способ преобразования константных значений в функции в случаях, когда свойство может быть задано либо как функция, либо как константа. Например, многие макеты D3 позволяют задавать свойства таким образом, и это упрощает реализацию, если мы автоматически преобразуем константные значения в функции.
d3.rebind(цель, источник, имена…)
Копирует методы со специфицированными именами из источника в цель и возвращает цель. Вызов одного из методов с указанными именами на объекте цели вызывает одноимённый метод на объекте источника, передавая любые аргументы, переданные методу цели, и используя объект источника в качестве this контекста. Если метод источника возвращает объект источника, метод цели возвращает объект цели («метод установки»); в противном случае метод цели возвращает значение, возвращаемое методом источника («режим получения»). Оператор rebind позволяет связывать унаследованные методы (миксины) с подклассом на другом объекте.
События
Поведения и компоненты более высокого уровня D3, такие как щётка, используют d3.dispatch для трансляции пользовательских событий.
Для визуализаций с согласованными представлениями d3.dispatch предоставляет удобный лёгкий механизм для слабо связанных компонентов. Организация кода с помощью d3.dispatch может помочь в разделении проблем и сделать код более поддерживаемым.
d3.dispatch(типы…)
Создаёт новый объект диспетчера для указанных типов. Каждый аргумент — строка, представляющая имя типа события, например, "zoom" или "change". Возвращаемый объект — ассоциативный массив; каждое имя типа связано с объектом диспетчеризации. Например, если вы хотите создать диспетчер событий для событий "start" и "end", вы можете сказать:
var dispatch = d3.dispatch("start", "end"); Затем вы можете получить доступ к диспетчерам для различных типов событий как dispatch.start и dispatch.end. Например, вы можете добавить обработчик событий:
dispatch.on("start", listener); А затем позже отправить событие всем зарегистрированным обработчикам:
dispatch.start();
Подробнее о том, как передавать аргументы обработчикам, см. dispatch.
dispatch.on(тип[, обработчик])
Добавляет или удаляет обработчик события обработчик для указанного типа. Тип — это строка имени типа события, например, "start" или "end". Указанный обработчик вызывается с контекстом и аргументами, определёнными вызывающим элементом; см. dispatch.
Если обработчик события уже был зарегистрирован для того же типа, существующий обработчик удаляется перед добавлением нового. Чтобы зарегистрировать несколько обработчиков для одного типа события, после типа можно указать необязательный префикс, например, "click.foo" и "click.bar". Аналогично, вы можете удалить все зарегистрированные обработчики для данного префикса, сказав dispatch.on(".foo", null).
Если обработчик не указан, возвращает текущего обработчика, назначенного для указанного типа, если таковой имеется.
dispatch.тип(аргументы…)
Метод тип (например, dispatch.start в приведенном выше примере) уведомляет каждый зарегистрированный обработчик, передавая обработчику указанные аргументы. this контекст будет использоваться в качестве контекста зарегистрированных обработчиков. Например, чтобы вызвать все зарегистрированные обработчики с контекстом foo и аргументом bar, скажите dispatch.call( foo, bar ). Таким образом, вы можете передать любые аргументы, которые вам нужны, обработчикам; чаще всего вы можете создать объект, который представляет событие, или передать текущий элемент данных ( d ) и индекс ( i ). Вы также можете управлять контекстом «this» обработчиков с помощью call или apply.
Например, если вы хотели бы перехватить родное событие «click» в ваше «custom» событие, сохраняя контекст и аргументы, вы могли бы сказать:
selection.on("click", function(d, i) {
dispatch.custom.apply(this, arguments);
});
© 2010–2016 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-3.x-api-reference/blob/master/Internals.md