Skip to content

RU Внутренние функции

mingun edited this page Jun 18, 2014 · 5 revisions

ВикиСправка по APIЯдроВнутренние функции
English | Русский

Различные вспомогательные вещи для реализации переиспользуемых компонентов.

Функции

# d3.functor(value)

Если указанное значение value является функцией, возвращает указанное значение. В противном случае возвращает функцию, возвращающую указанное значение. Метод используется внутри D3 как ленивый способ приведения константных значений к функциям, в случае, если свойство может быть указано и как функция, и как константа. Например, многие схемы размещения в D3 позволяют указывать таким образом свойства — это упрощает реализацию, если мы автоматически преобразовываем значения констант в функции.

# d3.rebind(target, source, names…)

Копирует методы с указанными именами names из объекта-источника source в объект-приёмник target и возвращает объект-приёмник. Вызов одного из перечисленных методов на объекте-приёмнике вызовет одноимённый метод на объекте-источнике с передачей ему всех аргументов, переданных методу приёмника и с использованием объекта-источника в качестве контекста this. Если метод источника возвращает объект-источник, метод приёмника возвратит объект-приёмник (метод-«установщик»); в противном случае метод приёмника вернёт значение метода источника (режим «получателя»). Оператор rebind позволяет наследовать методы (примешивать их) для перепривязки подкласса к другому объекту.

События

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

диспетчеризация событий

Для визуализаций с скоординированными областями просмотра, d3.dispatch предоставляет удобный и легкий механизм для слабой связи компонентов. Организация кода с d3.dispatch может помочь с разделением обязанностей и сделать код более простым в поддержке.

# d3.dispatch(types…)

Создаёт новый объект диспетчера для указанных типов types. Каждый аргумент является строкой, представляющей имя типа события, например «zoom» или «change». Возвращаемый объект является ассоциативным массивом; каждое имя типа ассоциируется с объектом-диспетчером. Например, если вы хотите создать диспетчера для событий «start» и «end», вы можете написать:

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

Затем вы сможете получать доступ к диспетчерам для разных типов событий через атрибуты dispatch.start и dispatch.end. Например, вы можете добавить слушатель событий:

dispatch.on("start", listener);

А потом передать событие всем зарегистрированным слушателям:

dispatch.start();

За деталями о том, как передавать аргументы в слушатели событий, смотрите документацию по методу dispatch.

# dispatch.on(type[, listener])

Добавляет или удаляет слушатель событий listener для указанного типа type. Тип type должен быть строкой имени типа события, например «start» или «end». Указанный слушаетль listener вызывается с контестом и аргументами, определяемыми вызывающей стороной; смотрите dispatch. Кроме того, вы можете удалить всех зарегистрированных слушателей для данного пространства имён, написав dispatch.on(".foo", null).

Если слушатель событий уже зарегистрирован для указанного типа, существующий слушатель будет удалён перед тем как новый слушатель будет добавлен. Для регистрирования нескольких слушателей с одинаковым типом события, за типом может следовать необязательное пространство имён, например «click.foo» или «click.bar».

Если параметр listener не указан, возвращает текущий слушатель, ассоциированный с указаным типом type, если таковой имеется.

# dispatch.type(arguments…)

Метод type (как dispatch.start в примере выше) уведомляет все зарегистрированные слушатели, передавая слушателю указанные аргументы arguments. Контекст 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);
});
Clone this wiki locally