Справка по Computed переменным — Knockout.js
Следующая документация описывает, как строить и работать с computed-переменными.
Строим computed-переменную
Computed-переменная может быть построена используя одну из следующих форм:
- ko.computed( evaluator [, targetObject, options] ) — Эта форма поддерживает самый типичный вариант создания computed-переменных.
- evaluator — Функция (так же оценочная функция), которая используется для оценки (расчета) текущего значения computed-переменной.
- targetObject — Если указано, определяет значение контекста для this когда KO вызывает вашу callback-функцию. Смотри раздел управление контекстом this чтобы узнать больше.
- options — Объект с дополнительными свойствами для computed-переменной. Смотри полный список свойств ниже.
- ko.computed( options ) — Эта форма с одним параметром для создания computed-переменной, принимающей JavaScript объект с любым из следующих свойств.
- read — Обязательное. Функция, которая используется для оценки (расчета) текущего значения computed-переменной.
- write — Опциональное. Если указано, делает computed-переменную записываемой. Это функция, которая получает значения, которые пытаются записать другие участки кода в вашу computed-переменную. Вам предоставляется возможность указать собственную логику для обработки входящих значений, обычно происходит запись значений в некоторые базовые observable-переменные.
- owner — Опциональное. Если указано, определяет значение для this когда KO запускает ваши callback-функции для read или write.
- pure — Опциональное. Если этот параметр равен true, то computed-переменная будет настроена, как purecomputed переменная. Данный параметр является альтернативным способом к конструктору ko.pureComputed.
- deferEvaluation — Опциональное. Если параметр равен true, то значение computed-переменной не будет повторно пересчитываться, пока где-то не будет реальной попытки получить значение данной переменной, или не будет вручную добавлена подписка на её значение. По-умолчанию, computed-переменные определяют свое значение мгновенно, во время создания.
- disposeWhen — Опциональное. Если указано, эта функция будет вызываться перед каждым пересчетом значения, для определения, должна ли computed-переменная освободить ресурсы или нет. Значение true запустит освобождение ресурсов от данной computed-переменной.
- disposeWhenNodeIsRemoved — Опциональное. Если указано, освобождение ресурсов данной computed-переменной будет запущено, когда указанный DOM элемент был удален KO. Эта возможность используется для высвобождения ресурсов, вовлеченных в процесс работы computed-переменных, используемых в биндингах, когда узлы DOM были удалены через template и биндинги управления потоком передачи данных (control-flow).
- ko.pureComputed( evaluator [, targetObject] ) — Создает pure computed переменную используя переданную функцию расчета значения и опциональный объект, используемый для контекста this. В отличии от ko.computed, это метод не принимает параметр options.
- ko.pureComputed( options ) — Создает pure computed-переменную, используя объект options. Принимает опции read, write, и owner описанные выше.
Использование computed переменной
Computed переменная предоставляет следующие функции:
- dispose() — Вручную высвобождает ресурсы, задействованные для этой computed-переменной, очищая все подписки и зависимости. Эта функция удобна, если вы хотите остановить обновления computed-переменной, или хотите очистить память для computed-переменной, которая имеет зависимости от observable-переменных, которые не были удалены.
- extend(extenders) — Применяет переданные экстендеры к computed-переменной.
- getDependenciesCount() — Возвращает текущее число зависимостей данной computed-переменной.
- getSubscriptionsCount( [event] ) — Возвращает текущее число подписок (либо от других computed-переменных, или вручную созданных подписок) computed-переменной. Опционально, можно передать имя события (вроде «change»), чтобы вернуть число подписок только на это событие.
- isActive() — Возвращает может ли данная computed-переменная быть в будущем обновлена. Computed-переменная является неактивной, если не имеет зависимостей.
- peek() — Возвращает текущее значение computed-переменной без создания зависимости (смотри раздел peek).
- subscribe( callback [,callbackTarget, event] ) — Регистрирует прямую подписку для уведомлений об изменении значения computed-переменной.
Определение типа observable-переменной
Для проверки, является ли свойство observable, computed, и т.п. переменной, используйте следующий набор функций:
- ko.isObservable — вернет true для observable, observable массивов, и всех computed-переменных.
- ko.isWritableObservable — вернет true для observable, observable массивов, и записываемых computed переменных (так же имеет алиас ko.isWriteableObservable).
- ko.isComputed — вернет true для всех computed переменных.
- ko.isPureComputed — вернет true для pure computed переменных.
Используем контекст computed переменных
Во время вызова оценочной функции в computed переменных, вы можете вызвать функцию ko.computedContext для получения информации о текущем computed свойстве. Она предоставляет следующие методы:
- isInitial() — Функция, возвращающая true если оценочная функция текущей computed-переменной была вызвана самый первый раз, или false в иных случаях. Для pure computed переменных, isInitial() всегда будет возвращать undefined.
- getDependenciesCount() — Возвращает число зависимостей для computed переменной, обнаруженных на данный момент времени во время текущего вызова оценочной функции.
- Примечание: ko.computedContext.getDependenciesCount() эквивалентно вызову getDependenciesCount() на самой computed переменной. Причина, по которой метод так же существует на ko.computedContext — это предоставление способа подсчета зависимостей при самом первом запуске оценочной функции, ещё до того, как computed переменная закончила свое создание.
Пример:
var myComputed = ko.computed(function() {
// ... Пропущено: читаем некоторые данные, которые могут быть observable-переменными ...
// Теперь, давайте исследуем ko.computedContext
var isFirstEvaluation = ko.computedContext.isInitial(),
dependencyCount = ko.computedContext.getDependenciesCount(),
console.log("Расчет значения " + (isFirstEvaluation ? "в первый раз" : "снова"));
console.log("Сейчас, у данной computed-переменной есть " + dependencyCount + " зависимостей");
// ... Пропущено: возвращаем результат ...
});
Такие конструкции обычно полезны лишь в продвинутых сценариях, например, когда основное назначение вашей computed переменной — запуск какого-то стороннего действия во время вызова оценочной функции, и вы хотите выполнить какой-то алгоритм настройки лишь при первом запуске, или только в том случае, если есть хотя бы одна зависимость (и следовательно, переменная может пересчитаться в будущем). Большинству computed свойств не требуется отслеживание того, были и значения рассчитаны ранее, или же сколько зависимостей они содержат.
Эксклюзивно для сайта skv1991.ru
Перепечатка и копирование строго запрещены.